1. 程式人生 > 其它 >SpringBoot - Lombok使用詳解3(@NoArgsConstructor、@AllArgsConstructor、@RequiredArgsConstructor)

SpringBoot - Lombok使用詳解3(@NoArgsConstructor、@AllArgsConstructor、@RequiredArgsConstructor)

五、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);
    }
}
早年同窗始相知,三載瞬逝情卻萌。年少不知愁滋味,猶讀紅豆生南國。別離方知相思苦,心田紅豆根以生。