Lombok 之 Constructor
在Lombok中,生成構造方法的annotation一共有三個,@NoArgsConstructor, @RequiredArgsConstructor, @AllArgsContructor。使用這三個annotation來完成專案中對於不同構造方法的需求。
@NoArgsConstructor : 生成一個無引數的構造方法,這個annotation在與其他的annotation配合起來使用的時候更加能凸顯出他的重要性,例如在使用hibernate這種框架的時候,如果有一個有引數的構造方法的時候,NoArgsConstructor會展示出他的作用。
@RequiredArgsConstructor: 會生成一個包含常量,和標識了NonNull的變數 的構造方法。生成的構造方法是private,如何想要對外提供使用可以使用staticName選項生成一個static方法。
@AllArgsContructor: 會生成一個包含所有變數,同時如果變數使用了NonNull annotation , 會進行是否為空的校驗, 我們來看一下官方給出的一個例子:
import lombok.AccessLevel;
import lombok.RequiredArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.NonNull;
@RequiredArgsConstructor(staticName = "of")
@AllArgsConstructor(access = AccessLevel.PROTECTED)
public class ConstructorExample<T> {
private int x, y;
@NonNull private T description;
@NoArgsConstructor
public static class NoArgsExample {
@NonNull private String field;
}
}
上面的例子用Java程式碼翻譯一下就是:
public class ConstructorExample<T> {
private int x, y;
@NonNull private T description;
private ConstructorExample(T description) {
if (description == null) throw new NullPointerException("description");
this.description = description;
}
public static <T> ConstructorExample<T> of(T description) {
return new ConstructorExample<T>(description);
}
@java.beans.ConstructorProperties({"x", "y", "description"})
protected ConstructorExample(int x, int y, T description) {
if (description == null) throw new NullPointerException("description");
this.x = x;
this.y = y;
this.description = description;
}
public static class NoArgsExample {
@NonNull private String field;
public NoArgsExample() {
}
}
}
如果是@AllArgsConstructor 在生成的建構函式上會生成一@ConstructorProperties 的Java annotation, 當然也可以通過將suppressConstructorProperties 設定為true來禁用@ConstructorProperties 。 如果你知道@ConstructorProperties 是幹什麼用的,那麼一定就知道@NoArgsConstructor為什麼沒有這個配置引數了。
值得注意一點的是:@ConstructorProperties 只能用在JDK 6 中
相關文章
- Java效率工具之LombokJavaLombok
- Prototype/ConstructorStruct
- JavaScript constructorJavaScriptStruct
- Default copy constructor does not call correct base(轉) constructorStruct
- SpringBoot優雅編碼之:Lombok加持Spring BootLombok
- lombok版本 與 lombok plugins版本問題LombokPlugin
- Java之建立物件>4.Enforce noninstantiability with a private constructorJava物件Struct
- JavaScript學習筆記之constructor,prototype,__proto__解惑JavaScript筆記Struct
- get_constructorStruct
- constructor和superStruct
- TypeError: SizeOnlySource is not a constructorErrorStruct
- Lombok生成get/set異常問題(Lombok缺陷)Lombok
- 簡易版的 Spring 之如何實現 Constructor 注入SpringStruct
- lombok的使用Lombok
- Lombok @Locked指南Lombok
- sprintboot 配置 lombokbootLombok
- Angular 2 constructor & ngOnInitAngularStructGo
- React 中constructor 作用ReactStruct
- Lombok使用指南Lombok
- Eclipse lombok javaEclipseLombokJava
- Lombok常用註解Lombok
- LomBok簡化POJOLombokPOJO
- LOMBOK使用詳解Lombok
- @Lombok注意事項Lombok
- Javascript - prototype、__proto__、constructorJavaScriptStruct
- C++物件模型:constructorC++物件模型Struct
- Java之建立物件>3.Enforce the singleton property with a private constructor or an enum typeJava物件Struct
- Lombok 註解詳解Lombok
- 你幹啥的?LombokLombok
- Lombok 原理與實現Lombok
- Lombok介紹和配置Lombok
- lombok註解介紹Lombok
- SpringBoot使用LomBokSpring BootLombok
- 發現神奇的lombokLombok
- Lombok——程式碼簡化Lombok
- 徹底深刻理解js原型鏈之prototype,__proto__以及constructor(二)JS原型Struct
- 徹底深刻理解js原型鏈之prototype,__proto__以及constructor(一)JS原型Struct
- js報錯:TypeError: Date is not a constructorJSErrorStruct