天天看點

踩坑系列之Lombok @Builder 注解簡介屬性包含預設值Lombok的@Builder注解在使用的,會覆寫model自己的無參數構造函數

簡介

Builder 使用建立者模式又叫建造者模式。簡單來說,就是一步步建立一個對象,它對使用者屏蔽了裡面建構的細節,但卻可以精細地控制對象的構造過程。@Builder注釋為你的類生成相對略微複雜的建構器API。@Builder可以讓你以下面顯示的那樣調用你的代碼,來初始化你的執行個體對象:

User.builder().name("xiaoming").age(18).build();           

但Builder注解也非常容易踩坑,下面介紹兩個容易出錯的坑。

屬性包含預設值

@Setter
@Getter
@Builder
public class User {
    private Integer age = 18;
    private String name;
}           

在使用Builder構造User對象的時候,預設值無效。如上面設定的age預設值為18,但使用builder建構對象的時候這個預設值無效,下面的代碼會輸出為null

User user = User.builder().name("xiaoming").build();
      System.out.println(user.getAge()); // null           

Lombok的@Builder注解在使用的,會覆寫model自己的無參數構造函數

踩坑系列之Lombok @Builder 注解簡介屬性包含預設值Lombok的@Builder注解在使用的,會覆寫model自己的無參數構造函數

從上圖中可以看出無參數的構造方法不存在,全參數的構造方法為私有。這個時候對其序列化操作會出現異常,如下圖。

踩坑系列之Lombok @Builder 注解簡介屬性包含預設值Lombok的@Builder注解在使用的,會覆寫model自己的無參數構造函數

此時可以通過@NoArgsConstructor @AllArgsConstructor 注解來解決

繼續閱讀