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

问题描述 投票:0回答:3

我试过了。

@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;
}
java accessor lombok
3个回答
22
投票

不幸的是,这是不可能的。您需要实现自己的 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;
    }
}

结果你会上这样的课:

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

13
投票

恐怕你不能。

来自doc(重点是我的):

@Accessors
注解用于配置lombok如何生成和查找getters和setters。

所以

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


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


2
投票
@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());
}
© www.soinside.com 2019 - 2024. All rights reserved.