Lombok你們都知道,在使用POJO過程當中,它給咱們帶來了不少便利,省下大量寫get、set方法、構造器、equal、toString方法的時間。除此以外,經過@Builder註解,lombok還能夠方便的時間建造者模式。bash
只須要定義一個靜態公共的內部類便可。代碼示例以下:函數
public class User {
private Integer id;
private String name;
private String address;
private User() {
}
private User(User origin) {
this.id = origin.id;
this.name = origin.name;
this.address = origin.address;
}
public static class Builder {
private User target;
public Builder() {
this.target = new User();
}
public Builder id(Integer id) {
target.id = id;
return this;
}
public Builder name(String name) {
target.name = name;
return this;
}
public Builder address(String address) {
target.address = address;
return this;
}
public User build() {
return new User(target);
}
}
複製代碼
若是項目中有使用lombok的話,能夠直接使用@Builder註解來實現ui
改造上面的類以下:this
import lombok.Builder;
import lombok.ToString;
/**
* @author wulongtao
*/
@ToString
@Builder
public class UserExample {
private Integer id;
private String name;
private String address;
}
複製代碼
如何使用:spa
UserExample userExample = UserExample.builder()
.id(1)
.name("aaa")
.address("bbb")
.build();
System.out.println(userExample);
複製代碼
對於這個問題,找到了以下解法3d
經過這種方式,子類Builder對象可使用父類的全部私有屬性。
可是這種解法也有兩個反作用:code
@AllArgsConstructor
註解,父類構造函數字段的順序由聲明字段的順序決定,若是子類構造函數傳參的時候順序不一致,字段類型還同樣的話,出了錯很差發現雖然有這兩個反作用,可是這種解法是我找到的惟一一種解決子類使用@Builder,能使用父類屬性的方式。cdn
參考博客評論: Lombok’s @Builder annotation and inheritance對象
在評論區也有這種方式的反作用討論,連接是: Using Lombok’s @Builder annotation with default valuesblog