1.Lombok是什么?
Lombok是一個(gè)通過注解以達(dá)到減少代碼的java插件,通過注解減少set和get方法,構(gòu)造方法等。
安裝Lombok
首先需要安裝插件,才能進(jìn)行識(shí)別
File->settings->Plugins>Browse repositories->Lombok,如圖

方法一 如果使用的是Maven,則可以在項(xiàng)目的pom.xml文件下添加依賴
<dependency>
? ? <groupId>org.projectlombok</groupId>
? ? <artifactId>lombok</artifactId>
? ? <version>1.16.12</version>
</dependency>
方法二 通過gradle在項(xiàng)目build.gradle下添加依賴
compile'javax.annotation:javax.annotation-api:1.2'
compile'org.projectlombok:lombok:1.16.6'
使用Lombok
Lombok 提供注解方式來提高代碼的簡(jiǎn)潔性,常用注解有:
@Data
該注解相當(dāng)于同時(shí)加上以下注解@Setter@Getter@ToString@EqualsAndHashCode
@Setter@Getter
作用于屬性上,自動(dòng)生成get,set方法
@NonNull
該注解快速判斷是否為空,如果為空,則拋出java.lang.NullPointerException
@Synchronized
該注解自動(dòng)添加到同步機(jī)制,有趣的是,生成的代碼并不是直接鎖方法,而是鎖代碼塊,使用方法:
private DateFormat format =new SimpleDateFormat("MM-dd-YYYY");
@Synchronized?
????public String synchronizedFormat(Datedate)?
????????{returnformat.format(date);}
生成等價(jià)代碼:
????private final java.lang.Object$lock= new java.lang.Object[0];
????private DateFormat format = new SimpleDateFormat("MM-dd-YYYY");
????public String synchronizedFormat(Date date) {?
?????????????????synchronized ($lock) {
????????????????????return format.format(date);?
?????????????}
????}
@ToString
該方法大家應(yīng)該非常熟悉,但需要注意的是:@ToString有多個(gè)屬性可以進(jìn)一步設(shè)置:
callSuper 是否輸出父類的toString方法,默認(rèn)為false
includeFieldNames 是否包含字段名稱,默認(rèn)為true
exclude 排除生成tostring的字段
@EqualsAndHashCode
1.?此注解會(huì)生成equals(Object other)?和?hashCode()方法。
2.?它默認(rèn)使用非靜態(tài),非瞬態(tài)的屬性
3.?可通過參數(shù)exclude排除一些屬性
4.?可通過參數(shù)of指定僅使用哪些屬性
5.?它默認(rèn)僅使用該類中定義的屬性且不調(diào)用父類的方法
6.?可通過callSuper=true解決上一點(diǎn)問題。讓其生成的方法中調(diào)用父類的方法。
@CleanUp
注釋可用于確保已分配的資源被釋放,如IO的連接關(guān)閉
public void testCleanUp(){?
????try{
????????????????@Cleanup
????????????????????ByteArrayOutputStream baos =new ByteArrayOutputStream(); ????????????????????baos.write(newbyte[] {'Y','e','s'});?
? ? ? ? ? ? ? ? ? ? ?System.out.println(baos.toString()); }
? ? ? catch(IOException e) {
?????????????????e.printStackTrace();?
?????}
}
@SneakyThrows
用法比較簡(jiǎn)單,其實(shí)就是對(duì)于異常的一個(gè)整理,將checked exception 看做unchecked exception, 不處理,直接扔掉。?減少了到處寫catch的不便利性。比如在線程中,catch所有異常,再比如在一些不太可能發(fā)生異常的地方,但是你又必須cache checked exception的地方使用這個(gè)annotation會(huì)顯得代碼比較規(guī)整,易讀?;蛟S也會(huì)顯得高大上一點(diǎn)吧
public class SneakyThrowsExample implements Runnable {
?? @SneakyThrows(UnsupportedEncodingException.class)
?? public String utf8ToString(byte[] bytes) {
???? return new String(bytes, "UTF-8");
?? }
?? @SneakyThrows
?? public void run() {
???? throw new Throwable();
?? }
}