Как с помощью ломбока сгенерировать как стандартные, так и плавные методы доступа?

Я попробовал это.

@lombok.Getter
@lombok.Setter
@lombok.Accessors(chain = true, fluent = true)
private String prop;

И @Accessor имеет приоритет, а getProp и setProp не генерируются.

Как я могу заставить его генерировать это?

public String getProp() {
    return prop;
}
public String prop() {
    //return prop;
    return getProp(); // wow factor
}
public void setProp(String prop) {
    this.prop = prop;
}
public Some prop(String prop) {
    //this.prop = prop;
    setProp(prop); // wow factor, again
    return this;
}

person Jin Kwon    schedule 12.04.2016    source источник


Ответы (3)


К сожалению, это невозможно. Вам нужно реализовать собственные геттеры и сеттеры и добавить аннотации @Getter @Setter и @Accessors(fluent = true) для достижения этой цели.

@Getter
@Setter
@Accessors(fluent = true)
public class SampleClass {
    private int id;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }
}

В результате у вас будет класс вроде:

public class SampleClass {
    private int id;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int id(){
        return id;
    }

    public SampleClass id(int id){
        this.id=id;
        return this;
    }
}
person Arek Kubiak    schedule 12.04.2016
comment
Немного опоздал на вечеринку. Обнаружено, что при использовании аннотаций Lombok в следующей комбинации нет необходимости добавлять сеттеры и геттеры. Таким образом, в приведенном выше примере getId() и setId(...) можно просто опустить. @Data @Accessors(fluent = true) - person mornejvr; 21.08.2019
comment
@mornejvr Я попробовал то, что вы предлагаете, но получил ошибку, не могу найти символ setFirstName (java.lang.String) с использованием Lombok версии 1.6.12, какую версию вы использовали? - person Bruno 82; 23.08.2019
comment
@Бруно, я использую 1.18.8. Возможно, он работает только с более новыми версиями Lombok. - person mornejvr; 03.09.2019
comment
Я бы предпочел использовать @Data вместо геттера и сеттера, хотя обратите внимание, что с ним вы получаете больше, чем просто геттер и сеттер. По крайней мере, за годы использования библиотеки я всегда извлекал выгоду из того, что предоставляет Data. - person Boro; 20.11.2019

Боюсь, вы не можете.

Из документа (выделено мной):

Аннотация @Accessors используется для настройки того, как ломбок генерирует и ищет геттеры и сеттеры.

Так что @Accessors ничего не генерирует, это просто способ настроить @Getter и @Setter.


Если вам действительно нужны плавные и обычные геттеры/сеттеры, вы можете добавить (вручную) обычный и заставить их делегировать беглым.

person Community    schedule 12.04.2016

person    schedule
comment
вопрос заключался в том, как получить как нормальные версии getter\setter, так и версии Fluent. - person Dmitriy; 23.09.2020