深入了解java Lombok的使用方法
前言
在Java中,封裝是一個(gè)非常好的機(jī)制,最常見(jiàn)的封裝莫過(guò)于get,set方法了,無(wú)論是Intellij idea 還是Eclipse,都提供了快速生成get,set方法的快捷鍵,使用起來(lái)很是方便,其實(shí),我們還有更方便的辦法,就是今天的主角-Lombok
Lombok是什么?
Lombok是一個(gè)通過(guò)注解以達(dá)到減少代碼的Java庫(kù),如通過(guò)注解的方式減少get,set方法,構(gòu)造方法等。
如何安裝Lombok?
如何安裝使用Lombok呢?
方法一
通過(guò)向lib文件夾中添加lombok.jar包即可,
方法二
如果使用的是Maven,則可在項(xiàng)目的pom.xml文件中添加以下依賴(lài):
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.12</version> </dependency>
通過(guò)以上兩種方法的確可以使用Lombok的相關(guān)API了,但無(wú)論是Intelij idea,還是Eclipse默認(rèn)情況下是不能識(shí)別的,我們還要讓idea識(shí)別起來(lái)。
Intellij Idea方法:
File->settings->Plugins->Browse repositories->Lombok
如何使用Lombok?
Lombok提供注解方式來(lái)提高代碼的簡(jiǎn)潔性,常用注解有:
- @Data
- @Setter @Getter
- @NonNull
- @Synchronized
- @ToString
- @EqualsAndHashCode
- @Cleanup
- @SneakyThrows
下面分別介紹每個(gè)方法的作用以及對(duì)應(yīng)的源代碼 @Data
該注解相當(dāng)于同時(shí)加上以下注解@Setter @Getter,@ToString,@EqualsAndHashCode,作用于類(lèi)中 使用:
/** * 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
作用于屬性上,自動(dòng)生成get,set方法.
/** * author: andy * date: 17-4-22 * blog: www.andyqian.com */ public class Person { @Getter@Setter private String name; }
等價(jià)源碼:
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
該注解自動(dòng)添加到同步機(jī)制,有趣的是,生成的代碼并不是直接鎖方法,而是鎖代碼塊, 作用范圍是方法上
使用方法:
private DateFormat format = new SimpleDateFormat("MM-dd-YYYY"); @Synchronized public String synchronizedFormat(Date date) { return format.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 是否輸出父類(lèi)的toString方法,默認(rèn)為false
- includeFieldNames 是否包含字段名稱(chēng),默認(rèn)為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; }
等價(jià)源碼:
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(); } }
等價(jià)源碼:
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é)
通過(guò)前面從安裝,到使用的案例章節(jié)的講解,希望Lbok能夠給你帶來(lái)更大的coding快感。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
idea 解決用骨架創(chuàng)建項(xiàng)目過(guò)慢的操作方式
這篇文章主要介紹了idea 解決用骨架創(chuàng)建項(xiàng)目過(guò)慢的操作方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-08-08SpringBoot實(shí)現(xiàn)發(fā)送郵件功能過(guò)程圖解
這篇文章主要介紹了SpringBoot實(shí)現(xiàn)發(fā)送郵件功能過(guò)程圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03Intellij IDEA 閱讀源碼的 4 個(gè)絕技(必看)
今天小編給大家分享Intellij IDEA 閱讀源碼的 4 個(gè)絕技,熟練的運(yùn)用 IDEA 中各個(gè)小技巧,讓閱讀跟蹤源碼變得更輕松,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2020-04-04jedis獲取redis中二進(jìn)制圖片轉(zhuǎn)Base64方式
這篇文章主要介紹了jedis獲取redis中二進(jìn)制圖片轉(zhuǎn)Base64方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07Java實(shí)現(xiàn)短信驗(yàn)證碼的示例代碼
本文主要介紹了Java實(shí)現(xiàn)短信驗(yàn)證碼的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03Mybatis-Plus中IdType.AUTO局部配置不生效的問(wèn)題解決
本文主要介紹了Mybatis-Plus中IdType.AUTO局部配置不生效的問(wèn)題解決,數(shù)據(jù)庫(kù)插入數(shù)據(jù)時(shí),id的默認(rèn)生成方式還是雪花算法,局部配置沒(méi)有生效,下面就來(lái)解決一下,感興趣的可以了解一下2023-09-09Java運(yùn)行時(shí)多態(tài)性的實(shí)現(xiàn)
Java運(yùn)行時(shí)多態(tài)性的實(shí)現(xiàn)...2006-12-12