深入了解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的相關API了,但無論是Intelij idea,還是Eclipse默認情況下是不能識別的,我們還要讓idea識別起來。
Intellij Idea方法:
File->settings->Plugins->Browse repositories->Lombok
如何使用Lombok?
Lombok提供注解方式來提高代碼的簡潔性,常用注解有:
- @Data
- @Setter @Getter
- @NonNull
- @Synchronized
- @ToString
- @EqualsAndHashCode
- @Cleanup
- @SneakyThrows
下面分別介紹每個方法的作用以及對應的源代碼 @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
該方法大家應該非常熟悉,但需要注意的是:@ToString有多個屬性可以進一步設置:
- 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的連接關閉。
使用方法:
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)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
SpringBoot實現(xiàn)發(fā)送郵件功能過程圖解
這篇文章主要介紹了SpringBoot實現(xiàn)發(fā)送郵件功能過程圖解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-03-03jedis獲取redis中二進制圖片轉(zhuǎn)Base64方式
這篇文章主要介紹了jedis獲取redis中二進制圖片轉(zhuǎn)Base64方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07Mybatis-Plus中IdType.AUTO局部配置不生效的問題解決
本文主要介紹了Mybatis-Plus中IdType.AUTO局部配置不生效的問題解決,數(shù)據(jù)庫插入數(shù)據(jù)時,id的默認生成方式還是雪花算法,局部配置沒有生效,下面就來解決一下,感興趣的可以了解一下2023-09-09