五、Lombok 注解詳解(2)
5,@NoArgsConstructor
注解在類上,為類提供一個無參的構造方法。
注意:
- 當類中有 final 字段沒有被初始化時,編譯器會報錯,此時可用 @NoArgsConstructor(force = true),然后就會為沒有初始化的 final 字段設置默認值 0 / false / null。
- 對於具有約束的字段(例如 @NonNull 字段),不會生成檢查或分配,因此請注意,正確初始化這些字段之前,這些約束無效。
// 使用注解 @NoArgsConstructor public class Shape { private int x; @NonNull private double y; @NonNull private String name; } // 不使用注解 public class Shape { private int x; private double y; private String name; public Shape(){ } }
6,@AllArgsConstructor
(1)注解在類上,為類提供一個全參的構造方法。
(2)默認生成的方法是 public 的,如果要修改方法修飾符可以設置 AccessLevel 的值。
- 例如:@Getter(access = AccessLevel.PROTECTED)
// 使用注解 @AllArgsConstructor(access = AccessLevel.PROTECTED) public class Shape { private int x; @NonNull private double y; @NonNull private String name; } // 不使用注解 public class Shape { private int x; private double y; private String name; protected Shape(int x, double y, String name){ this.x = x; this.y = y; this.name = name; } }
7,@RequiredArgsConstructor
(1)注解在類上,會生成構造方法(可能帶參數也可能不帶參數)。
注意:如果帶參數,這參數只能是以 final 修飾的未經初始化的字段或者是以 @NonNull 注解的未經初始化的字段。
(2)該注解還可以用 @RequiredArgsConstructor(staticName="methodName") 的形式生成一個指定名稱的靜態方法,返回一個調用相應的構造方法產生的對象
// 使用注解 @RequiredArgsConstructor(staticName = "hangge") public class Shape { private int x; @NonNull private double y; @NonNull private String name; } // 不使用注解 public class Shape { private int x; private double y; private String name; public Shape(double y, String name){ this.y = y; this.name = name; } public static Shape hangge(double y, String name){ return new Shape(y, name); } }
