如何使用 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
优先,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;
}
恐怕你不能。
来自 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());
}
我试过了。
@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;
}
恐怕你不能。
来自 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());
}