val |
用在局部變量前面,相當於將變量聲明爲final |
@NonNull |
給方法參數增加這個註解會自動在方法內對該參數進行是否爲空的校驗,如果爲空,則拋出NPE(NullPointerException) |
@Cleanup |
自動管理資源,用在局部變量之前,在當前變量範圍內即將執行完畢退出之前會自動清理資源,自動生成try-finally這樣的代碼來關閉流 |
@Getter/@Setter |
用在屬性上,再也不用自己手寫setter和getter方法了,還可以指定訪問範圍 |
@ToString |
用在類上,可以自動覆寫toString方法,當然還可以加其他參數,例如@ToString(exclude=”id”)排除id屬性,或者@ToString(callSuper=true, includeFieldNames=true)調用父類的toString方法,包含所有屬性 |
@EqualsAndHashCode |
用在類上,自動生成equals方法和hashCode方法 |
@NoArgsConstructor , @RequiredArgsConstructor and @AllArgsConstructor |
用在類上,自動生成無參構造和使用所有參數的構造函數以及把所有@NonNull屬性作爲參數的構造函數,如果指定staticName = “of”參數,同時還會生成一個返回類對象的靜態工廠方法,比使用構造函數方便很多 |
@Data |
註解在類上,相當於同時使用了@ToString、@EqualsAndHashCode、@Getter、@Setter和@RequiredArgsConstrutor這些註解,對於POJO類十分有用 |
@Value |
用在類上,是@Data的不可變形式,相當於爲屬性添加final聲明,只提供getter方法,而不提供setter方法 |
@Builder |
用在類、構造器、方法上,爲你提供複雜的builder APIs,讓你可以像如下方式一樣調用Person.builder().name(“Adam Savage”).city(“San Francisco”).job(“Mythbusters”).job(“Unchained Reaction”).build();更多說明參考Builder |
@SneakyThrows |
自動拋受檢異常,而無需顯式在方法上使用throws語句 |
@Synchronized |
用在方法上,將方法聲明爲同步的,並自動加鎖,而鎖對象是一個私有的屬性lock或LOCK,而java中的synchronized關鍵字鎖對象是this,鎖在this或者自己的類對象上存在副作用,就是你不能阻止非受控代碼去鎖this或者類對象,這可能會導致競爭條件或者其它線程錯誤 |
@Getter(lazy=true) |
可以替代經典的Double Check Lock樣板代碼 |
@Log |
根據不同的註解生成不同類型的log對象,但是實例名稱都是log,有六種可選實現類 |