前言
Lombok
是一種 Java™
實用工具,可用來幫助開發人員消除 Java 的冗長,尤其是對於簡單的 Java 對象(POJO)。使用注解更優雅的編碼,也能減少開發中重復造輪子。本文將介紹lombok的基礎注解及參數含義。
@Getter
可選元素:
修飾符和類型 | 可選元素 | 描述 |
---|---|---|
boolean |
lazy |
|
Getter.AnyAnnotation[] |
onMethod |
這里列出的任何注釋都放在生成的方法上。 |
AccessLevel |
value |
如果你想讓你的getter不公開,你可以在這里指定一個替代訪問級別。 |
使用示例:
@Getter( lazy = true, onMethod = @_({@JsonIgnore}), value = AccessLevel.PROTECTED ) private final String name = "";
說明:
-
Lazy:默認為:
false
,如果設置 lazy 則 該屬性必須為 final -
onMethod:默認為
{}
,此處出現的注解會在生成的方法上面,最常見的使用是結合JackJson,做序列化標注- JDK7-:
@Getter(onMethod=@__({@AnnotationsGoHere}))
- JDK8+:
@Getter(onMethod_={@AnnotationsGohere})//注意后面的下划線onMethod
- JDK7-:
-
AccessLevel:默認為
AccessLevel.PUBLIC
可以手動修改方法的訪問級別,配置參數為 枚舉類:AccessLevel
中屬性
@Setter
可選元素
修飾符和類型 | 可選元素 | 描述 |
---|---|---|
Setter.AnyAnnotation[] |
onMethod |
這里列出的任何注釋都放在生成的方法上。 |
Setter.AnyAnnotation[] |
onParam |
這里列出的任何注釋都放在生成的方法參數上。 |
AccessLevel |
value |
如果你希望你的setter是非公開的,你可以在這里指定一個替代訪問級別。 |
使用示例:
@Setter(value = AccessLevel.PRIVATE) private String trueName;
說明:
-
該屬性配置和
@Getter
經常結合使用 -
onParam
:該屬性為參數的注解,此處可以和@NotNull
配合使用控制參數不為空,該屬性配置同onMethod
@NonNull
可選元素:無
使用示例:
@NonNull private String trueName; private String getTrueName(@NonNull String name)
說明:
- 該注解可以用在 字段、方法、參數 上 常見用於 字段 和 參數
- 如果是字段注解,那么生成的
get
、構造方法 都會進行 null 檢測 - 如果是參數注解,在方法的開頭會加入一個空值檢測。
- 該注解檢測到空值后會拋出
NullPointerException
@ToString
可選元素
修飾符和類型 | 可選元素 | 描述 |
---|---|---|
boolean |
callSuper |
toString 在輸出中包含超類實現的結果。 |
boolean |
doNotUseGetters |
通常情況下,如果 getters 是可用的,那么被調用。 |
java.lang.String[] |
exclude |
這里列出的任何字段將不會被打印在生成的toString 實現中。 |
boolean |
includeFieldNames |
在打印時包括每個字段的名稱。 |
java.lang.String[] |
of |
如果存在,明確列出要打印的字段。 |
調用示例:
@ToString(callSuper = true, exclude = {"id"}) @Data public class TestModel { private int id; private String trueName; }
說明:
- callSuper:默認
false
- doNotUseGetters:默認
false
也就是會調用 get 方法 - exclude: 默認為空
- includeFieldNames:默認為
true
會打印字段名稱 - of:默認為全部字段,即打印全部字段
@EqualsAndHashCode
可選元素
修飾符和類型 | 可選元素 | 描述 |
---|---|---|
boolean |
callSuper |
調用超類的實現equals ,並hashCode 計算對該類中的字段值。 |
boolean |
doNotUseGetters |
通常情況下,如果getter 是可用的,那么被調用。 |
java.lang.String[] |
exclude |
這里列出的任何字段在生成equals 和hashCode 實現中都不會被考慮在內。 |
java.lang.String[] |
of |
如果存在,則明確列出要用於身份的字段。 |
EqualsAndHashCode.AnyAnnotation[] |
onParam |
這里列出的任何注釋都放在的生成的參數equals 和canEqual 。 |
調用示例
@EqualsAndHashCode public class TestModel { private int id; private String trueName; }
說明:
-
callSuper
:默認false
-
doNotUseGetters
:默認false
也就是會調用 get 方法 -
exclude
:默認為空 -
of
:默認為全部字段 -
onParam
:該注解用以 在傳入的Object object
參數注解
@AllArgsConstructor
可選元素
修飾符和類型 | 可選元素 | 描述 |
---|---|---|
AccessLevel |
access |
設置構造函數的訪問級別。 |
AllArgsConstructor.AnyAnnotation[] |
onConstructor |
這里列出的任何注釋都放在生成的構造函數中。 |
java.lang.String |
staticName |
如果設置,生成的構造函數將是私有的,並且用包裝真實構造函數的相同參數列表生成額外的靜態“構造函數”。 |
說明:生成一個全指標構造函數。全參數構造函數需要類中每個字段的一個參數。
@NoArgsConstructor
可選元素
修飾符和類型 | 可選元素 | 描述 |
---|---|---|
AccessLevel |
access |
設置構造函數的訪問級別。 |
boolean |
force |
如果true ,將所有最終字段初始化為0 / null / false。 |
NoArgsConstructor.AnyAnnotation[] |
onConstructor |
這里列出的任何注釋都放在生成的構造函數中。 |
java.lang.String |
staticName |
如果設置,生成的構造函數將是私有的,並且用包裝真實構造函數的相同參數列表生成額外的靜態“構造函數”。 |
說明:生成一個無參數的構造函數。如果由於final
字段的存在而無法寫入這樣的構造函數,將會生成錯誤消息。
@RequiredArgsConstructor
可選元素
修飾符和類型 | 可選元素 | 描述 |
---|---|---|
AccessLevel |
access |
設置構造函數的訪問級別。 |
RequiredArgsConstructor.AnyAnnotation[] |
onConstructor |
這里列出的任何注釋都放在生成的構造函數中。 |
java.lang.String |
staticName |
如果設置,生成的構造函數將是私有的,並且用包裝真實構造函數的相同參數列表生成額外的靜態“構造函數”。 |
說明:生成一個具有所需參數的構造函數。必需的參數是final
和約束的字段,如@NonNull
。
@Data
可選元素
修飾符和類型 | 可選元素 | 描述 |
---|---|---|
java.lang.String |
staticConstructor |
如果你指定一個靜態構造函數名,那么生成的構造函數將是私有的,而創建一個靜態工廠方法,其他類可以用來創建實例。 |
說明:
-
相當於
@Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode
。 -
為所有字段生成getter,一個有用的toString方法,以及hashCode和equals實現,用於檢查所有非瞬態字段。還將為所有非final字段以及構造函數生成setter。
-
staticConstructor
:默認:沒有靜態構造函數,而是普通的構造函數是公共的。如果你指定一個靜態構造函數名,那么生成的構造函數將是私有的,而創建一個靜態工廠方法,其他類可以用來創建實例。建議這個名字:“of”,就像這樣:public @Data(staticConstructor =“of”)類Point {final int x,y; }
.