如何使用 lombok 生成标准访问器和流畅的访问器?

How can I generate both standard accessors and fluent accessors with lombok?

我试过了。

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

@Accessor优先,getPropsetProp不生成。

我怎样才能让它生成这个?

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;
}

恐怕你不能。

来自 doc(重点是我的):

The @Accessors annotation is used to configure how lombok generates and looks for getters and setters.

所以 @Accessors 不会生成任何东西,它只是配置 @Getter@Setter 的一种方式。


如果你真的想要流利的 常规 getter/setter,你可以(手动)添加常规的并让它们委托给流利的。

不幸的是,这是不可能的。您需要实现自己的 getter 和 setter,并添加 @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;
    }
}

结果你会class喜欢:

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;
    }
}
@Accessors(chain = true)
@Setter @Getter
public class Person {
    private String firstName;
    private String lastName;
    private int height;
}

....

@Test
public void testAccessors() {
    Person person = new Person();

    person.setFirstName("Jack")
        .setLastName("Bauer")
        .setHeight(100);

    assertEquals("Jack", person.getFirstName());
    assertEquals("Bauer", person.getLastName());
    assertEquals(100, person.getHeight());
}