深入了解java Lombok的使用方法
前言
在Java中,封裝是一個非常好的機制,最常見的封裝莫過于get,set方法了,無論是Intellij idea 還是Eclipse,都提供了快速生成get,set方法的快捷鍵,使用起來很是方便,其實,我們還有更方便的辦法,就是今天的主角-Lombok
Lombok是什么?
Lombok是一個通過注解以達到減少代碼的Java庫,如通過注解的方式減少get,set方法,構(gòu)造方法等。
如何安裝Lombok?
如何安裝使用Lombok呢?
方法一
通過向lib文件夾中添加lombok.jar包即可,
方法二
如果使用的是Maven,則可在項目的pom.xml文件中添加以下依賴:
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.12</version> </dependency>
通過以上兩種方法的確可以使用Lombok的相關(guān)API了,但無論是Intelij idea,還是Eclipse默認情況下是不能識別的,我們還要讓idea識別起來。
Intellij Idea方法:
File->settings->Plugins->Browse repositories->Lombok
如何使用Lombok?
Lombok提供注解方式來提高代碼的簡潔性,常用注解有:
- @Data
- @Setter @Getter
- @NonNull
- @Synchronized
- @ToString
- @EqualsAndHashCode
- @Cleanup
- @SneakyThrows
下面分別介紹每個方法的作用以及對應(yīng)的源代碼 @Data
該注解相當于同時加上以下注解@Setter @Getter,@ToString,@EqualsAndHashCode,作用于類中 使用:
/**
* author: andy
* date: 17-4-22
* blog: www.andyqian.com
*/
@Data
public class Person {
private String name;
private String address;
private String city;
private String state;
private String zip;
private Date brithday;
}
效果如下:
@Getter@Setter
作用于屬性上,自動生成get,set方法.
/**
* author: andy
* date: 17-4-22
* blog: www.andyqian.com
*/
public class Person {
@Getter@Setter
private String name;
}
等價源碼:
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@NonNull
該注解快速判斷是否為空,如果為空,則拋出java.lang.NullPointerException
使用方法:
/**
* author: andy
* date: 17-4-22
* blog: www.andyqian.com
*/
public class Person {
private String name;
@Setter@Getter@NonNull
private List<Person> member;
}
源碼:
@NonNull
private List<Person> members;
public Family(@NonNull final List<Person> members) {
if (members == null) throw new java.lang.NullPointerException("members");
this.members = members;
}
@NonNull
public List<Person> getMembers() {
return members;
}
public void setMembers(@NonNull final List<Person> members) {
if (members == null) throw new java.lang.NullPointerException("members");
this.members = members;
}
@Synchronized
該注解自動添加到同步機制,有趣的是,生成的代碼并不是直接鎖方法,而是鎖代碼塊, 作用范圍是方法上
使用方法:
private DateFormat format = new SimpleDateFormat("MM-dd-YYYY");
@Synchronized
public String synchronizedFormat(Date date) {
return format.format(date);
}
生成等價源碼:
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有多個屬性可以進一步設(shè)置:
- callSuper 是否輸出父類的toString方法,默認為false
- includeFieldNames 是否包含字段名稱,默認為true
- exclude 排除生成tostring的字段
使用方法:
/**
* author: andy
* date: 17-4-22
* blog: www.andyqian.com
*/
@ToString(callSuper = true,exclude ={"name"})
public class Person {
private String name;
private String address;
}
等價源碼:
public String toString() {
return "Person{" +
"address='" + address + '\'' +
'}';
}
@Cleanup
注釋可用于確保已分配的資源被釋放,如IO的連接關(guān)閉。
使用方法:
public void testCleanUp() {
try {
@Cleanup ByteArrayOutputStream baos = new ByteArrayOutputStream();
baos.write(new byte[] {'Y','e','s'});
System.out.println(baos.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
等價源碼:
public void testCleanUp() {
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
baos.write(new byte[]{'Y', 'e', 's'});
System.out.println(baos.toString());
} finally {
baos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
小結(jié)
通過前面從安裝,到使用的案例章節(jié)的講解,希望Lbok能夠給你帶來更大的coding快感。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot實現(xiàn)發(fā)送郵件功能過程圖解
這篇文章主要介紹了SpringBoot實現(xiàn)發(fā)送郵件功能過程圖解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-03-03
jedis獲取redis中二進制圖片轉(zhuǎn)Base64方式
這篇文章主要介紹了jedis獲取redis中二進制圖片轉(zhuǎn)Base64方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07
Mybatis-Plus中IdType.AUTO局部配置不生效的問題解決
本文主要介紹了Mybatis-Plus中IdType.AUTO局部配置不生效的問題解決,數(shù)據(jù)庫插入數(shù)據(jù)時,id的默認生成方式還是雪花算法,局部配置沒有生效,下面就來解決一下,感興趣的可以了解一下2023-09-09

