val
自動識別參數類型,會定義一個局部final的變量
例如 val a = new ArrayList<String>(); 相當於 final ArrayList<String> a = new ArrayList<String>();
非空約束,
可以註解在方法的參數上,類的屬性上
public void hello(@NonNull String hello){
System.out.println(hello);
}
如果hello爲空的話,不會執行System.out.println(hello):方法,會拋出一個空指針異常
-----
註解在方法的屬性名上,如果有,@RequiredArgsConstructor註解 構造該對象時,必須傳入參數
public class App
{
private String hello;
}
對象引用結束前調用某個方法,默認是close()方法,也可以自己制定一個無參的方法,多用於關閉流等操作,避免繁瑣的try{}catch{}操作
@Getter/Setter
可以註解在類上或者字段上。
註解在類上爲所有的字段自動生成過 Getter/Setter 方法
可設置參數value=AccessLevel.xxxx 生成方法的訪問權限
@ToString
includeFieldNames 生成的toString是否包含字段名稱,默認true
exclude 排除那些字段
of 包括那些字段(默認全部),如果指定了對象,那麼 exclude 裏面對應的字段也會被執行
callSuper 是否調用父類的 toString()方法
doNotUseGetters 獲取字段值的時候,如果有可用的getters 是否不使用,默認false使用
@EqualsAndHashCode
exclude
of
callSuper
doNotUseGetters 同上
@NoArgsConstructor (自動生成無參構造器)
@RequiredArgsConstructor (有參構造器,如果 字段有 @NonNull 註解,那麼構造器必須包含該字段,不可以和@NoArgsConstructor同在)
@AllArgsConstructor 全參構造器,會生成一個帶有全部參數的構造器
staticName 會將構造器私有化,並創建一個靜態的方法
onConstructor
access 構造器的訪問權限,默認是 public
@Data
相當於使用了 @Getter
, @Setter
, @ToString
, @EqualsAndHashCode
and @RequiredArgsConstructor 這些註解
staticConstructorc 類似於staticName參數的作用
@Value
類似Data,但是會將所有的字段設置成 private final 的,並且不會生成setters
@Builder
會創建一個內部類,並創建靜態的 builder方法,可以通過該方法鏈式的構造對象,描述起來比較複雜
這一段最好能自己看看官方文檔:
https://projectlombok.org/features/Builder.html
@SneakyThrows
如果有一些自己不想處理的異常,但是拋出後,調用該方法的時候又有很多 try{}catch{}很麻煩,就可以用這個註解。
用的比較多的是實現Runnable 的run()方法裏面。衆所周知run()方法是沒有拋出異常的,寫在裏面的代碼動不動就要try{}catch{}着實麻煩,用這個註解就可以搞定了
@Synchronized
給方法加鎖
@Wither
該註解放在屬性前面,會生成屬性的withXXX方法,可以使用withAge(xxx).withXX() 鏈式操作
日誌類註解:自動在你的類裏面生成靜態的 類實例
@CommonsLog
Creates
private static final org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(LogExample.class);
@Log
Creates
private static final java.util.logging.Logger log = java.util.logging.Logger.getLogger(LogExample.class.getName());
@Log4j
Creates
private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(LogExample.class);
@Log4j2
Creates
private static final org.apache.logging.log4j.Logger log = org.apache.logging.log4j.LogManager.getLogger(LogExample.class);
@Slf4j
Creates
private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogExample.class);
@XSlf4j
onMethod= / onConstructor= / onParam= 可以在對應的 地方添加 其他註解
如果我們用了@Getter註解, 生成的getXX()方法是我們是看不到的,如果我們要在生成的getXXX()方法上面加註解,可以用 @Getter(onMethod=@__({@Ann1,@Ann2,@Ann3(value="hello")})) 這樣的方式
示例代碼如下
@AllArgsConstructor(onConstructor=@__(@Inject))
public class OnXExample {
@Getter(onMethod=@__({@Id, @Column(name="unique-id")}))
@Setter(onParam=@__(@Max(10000)))
private long unid;
}