繁体   English   中英

如何使用 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;
}

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

恐怕你不能。

文档(重点是我的):

@Accessors注释用于配置@Accessors如何生成和查找 getter 和 setter。

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


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

@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());
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM