我有一堂课User
public class User {
private String firstName;
private String lastName;
private int age;
public User withFirstName(String firstName) {
this.firstName = firstName;
return this;
}
public User withLastName(String lastName) {
this.lastName = lastName;
return this;
}
public User withAge(int age) {
this.age = age;
return this;
}
}
所以我可以使用User user = new User().withFirstName("Tom").withAge(30);
对其进行初始化,并且在初始化user
之后,我仍然可以通过user.lastName("Bob").age(31);
对其进行修改。
如何利用Lombok保存“ withXXX”方法? @Builder不适用于此用例。
答案 0 :(得分:3)
尝试一下:
@Data
@Builder
@Accessors(fluent = true) // <— This is what you want
public class User {
private final String firstName;
private final String lastName;
private final int age;
}
然后使用:
User user = User.builder()
.firstName("foo")
.lastName("bar")
.age(22)
.build();
后来:
user.setFirstName("baz").setAge(23); // fluent setters
请注意如何通过使所有字段为User
来使final
不可变(最佳实践)。如果需要可变性,请删除final
关键字。
答案 1 :(得分:1)