一、引入lombok
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.4</version>
<scope>provided</scope>
</dependency>
IDEA還需要下載lombok插件。
二、lombok的使用
1.@Data
@Data
public class Student {
private String name;
private Integer age;
}
@Data的功能很強大:
/**
* @Data
* 會為類的所有屬性自動生成setter/getter、equals、canEqual、hashCode、toString方法,如為final屬性,則不會為該屬性生成setter方法
*/
Student student = new Student();
student.setAge(18);
student.setName("yunmuzhou");
//從日志中可以看出,toString()已經(jīng)被重寫
log.info("@Data:" + student);
輸出日志:
@Data:Student(name=yunmuzhou, age=18)
2.@Getter & @Setter
public class Person {
@Getter
@Setter
private String name;
@Getter
@Setter
private Integer age;
}
但是借助于Lombok,一切都變得優(yōu)雅起來,代碼篇幅省了一半
/**
* @Getter
* @Setter
* 省去了寫getter(),setter()方法
*/
Person person = new Person();
person.setAge(10);
person.setName("ymz");
log.info("@Getter age :" + person.getAge() + ",@Getter name : " + person.getName());
輸出結(jié)果:
@Getter age :10,@Getter name : ymz
3.@Builder
@Data
@Builder
public class Man {
private String name;
private String sex;
}
new對象變得優(yōu)雅了:
/**
* @Builder
* 鏈式編程,很方便的創(chuàng)建一個新的對象 =====(以build()方法結(jié)尾) ====
*
* 1.構(gòu)造一個空對象
* 2.構(gòu)造一個對象并初始化
*/
Man man01 = Man.builder().build();
Man man02 = Man.builder().name("ymz").sex("male").build();
log.info("man01 : " + man01);
log.info("man02 : " + man02);
輸出結(jié)果:
man01 : Man(name=null, sex=null)
man02 : Man(name=ymz, sex=male)
4.@AllArgsConstructor & @NoArgsConstructor & @RequiredArgsConstructor
@Data
//@AllArgsConstructor
//@NoArgsConstructor
@RequiredArgsConstructor
public class Human {
private String name;
private String sex;
private final String address;
}
/**
* @AllArgsConstructor 全參數(shù)構(gòu)造
* 構(gòu)建一個全部參數(shù)的構(gòu)造方法
*/
//Human man = new Human();
/**
* @NoArgsConstructor 無參數(shù)構(gòu)造
* 構(gòu)建一個無參構(gòu)造
*/
Human man = new Human();
/**
* 構(gòu)建一個只包含final修飾的構(gòu)造方法
*/
Human man = new Human("浙江");
5.@NonNull
優(yōu)雅的進行null判斷:
public static void testNonNull(@NonNull String name){
log.info(name);
}
測試一下:
testNonNull(null);
結(jié)果:
Exception in thread "main" java.lang.NullPointerException: name is marked non-null but is null
6.很方便的關(guān)閉流stream
假如我們要讀取一個文檔,一般會這樣操作:

image.png
注意,這個文件句柄在使用完成之后是一定要手動 close的,否則就有可能資源泄漏。
有了Lombok之后,這種擦屁股活兒統(tǒng)統(tǒng)不用干了,一個 @Cleanup注解即可搞定

image.png
7.異常捕捉的便捷性
比如我們打開一個 txt文本文件:

image.png
這地方的 FileNotFoundException異常,要么顯式地在函數(shù)級拋出,要么就像上面一樣 try/catch內(nèi)部消滅。
如果在編碼時,不想處理這種繁雜的異常處理,你可以使用Lombok的 @SneakyThrows注解進行簡化,比如上面的代碼就可以簡化為:

image.png
必須友情提示的是:這樣寫你是爽了,但你很有可能會被隊友一頓暴打,因為別人調(diào)用你編寫的函數(shù),并不能顯式的獲知需要處理哪些異常,這樣容易留坑!
好了,受限于篇幅限制,拋磚引玉就到這里了。
上面列舉了幾個平時項目開發(fā)中使用非常頻繁的Lombok注解,除此之外,還有諸如像:
- @ToString:為類自動生成toString()方法
- @EqualsAndHashCode:為類自動生成hashCode和equals實現(xiàn)
- @Log:為類自動生成log日志記錄
- @Synchronized:為類方法或?qū)嵗椒ㄗ詣由蓅ynchronized保護
等工具也是非常好用的,大家可以嘗試在項目里用起來。
從此,代碼5分鐘,劃水2小時不是夢。。。
部分內(nèi)容引用來源CodeSheep