這里寫自定義目錄標題
- 問題case
- 原因
- 解決方案
文章參考來源:https://chenyongjun.vip/articles/107
問題case
Lombok 使用廣泛,這里分享一個 Lombok @Builder 小 case,今天自己踩了坑。
@Data
@Builder
public class User {private String name = "kitty";private int age = 20;private boolean enabled = true;public static void main(String[] args) {System.out.println(User.builder().build());}
}
輸出結果卻是:User(name=null, age=0, enabled=false),自行設置的值全部失效。
原因
使用User.builder().build()方法構造對象時,如果不主動賦值的情況下會被賦初值,而不會使用我們代碼中的初值。
解決方案
可以使用 @Builder.Default 標記屬性,以保留默認值。
@Data
@Builder
public class User {@Builder.Defaultprivate String name = "kitty";@Builder.Defaultprivate int age = 20;@Builder.Defaultprivate boolean enabled = true;public static void main(String[] args) {System.out.println(User.builder().build());}
}
輸出結果為:User(name=kitty, age=20, enabled=true)
一般領域對象都會使用基礎數據類型的包裝類,很少使用基礎數據類型,也很少給初始值,不容易發現。