摘要:為方法或構(gòu)造函數(shù)的參數(shù)生成檢查語(yǔ)句,相當(dāng)于生成的檢查語(yǔ)句會(huì)插入到方法的最前端,如果是構(gòu)造函數(shù),則在或調(diào)用之后插入檢查。
Lombok簡(jiǎn)介
Lombok是一個(gè)可以通過(guò)簡(jiǎn)單的注解形式來(lái)幫助我們簡(jiǎn)化消除一些必須有但顯得很臃腫的Java代碼的工具,通過(guò)使用對(duì)應(yīng)的注解,可以在編譯源碼的時(shí)候生成對(duì)應(yīng)的方法。
簡(jiǎn)單來(lái)說(shuō),我們平時(shí)開(kāi)發(fā)過(guò)程中總是要花很多時(shí)間為Java Bean 去創(chuàng)建getter和setter方法,當(dāng)類里面的屬性很多時(shí)則創(chuàng)建的getter和setter就很多,代碼就很長(zhǎng)。而lombok就可以為我們省去創(chuàng)建getter和setter方法的麻煩,代碼也會(huì)更加簡(jiǎn)潔。
Lombok官方地址: https://projectlombok.org/
使用方法 一、安裝插件操作步驟:File -> Settings... -> Plugins -> Browse repositories... -> 輸入Lombok搜索并安裝,安裝完成后重啟IntelliJ IDEA。
二、引用jar包如果是使用Maven構(gòu)建項(xiàng)目,則添加以下依賴:
org.projectlombok lombok 1.16.18 provided
否則直接下載jar包并引入到項(xiàng)目中,下載地址為:下載Lombok
三、lombok使用lombok的使用主要是通過(guò)注解方式,官網(wǎng)文檔lombok注解 有很詳細(xì)的說(shuō)明。
@@NonNull@NonNull為方法或構(gòu)造函數(shù)的參數(shù)生成null檢查語(yǔ)句,相當(dāng)于if (param == null) throw new NullPointerException("param");;生成的null檢查語(yǔ)句會(huì)插入到方法的最前端,如果是構(gòu)造函數(shù),則在this()或super()調(diào)用之后插入null檢查。
使用lombok,我們可以這樣寫(xiě):
import lombok.NonNull; public class User extends BaseEntity { private String name; private String password; public User(@NonNull Person person) { super("Hello"); this.name = person.getName(); this.password = person.getPassword(); } }
而不使用lombok則是這樣寫(xiě):
import lombok.NonNull; public class User extends BaseEntity { private String name; private String password; public User(@NonNull Person person) { super("Hello"); if (person == null) { throw new NullPointerException("person"); } this.name = person.getName(); this.password = person.getPassword(); } }@Getter/@Setter
使用@Getter/@Setter給字段注解,lombok會(huì)自動(dòng)生成默認(rèn)的getter/setter方法,在Intellij IDEA的Structure欄中可查看這個(gè)類的概要,就可以看到getter和setter方法已被添加到User類中:
在未指定字段修飾符情況下,lombok生成的getter/setter方法是public的,若要修改其修飾符可設(shè)置AccessLevel的值,如:
import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; public class User { private @Getter(AccessLevel.PRIVATE) @Setter String name; private @Getter @Setter String password; }
此時(shí)能看到User類中的getName方法的圖標(biāo)變成了一個(gè)鎖,說(shuō)明getName方法已經(jīng)是private的,將不會(huì)被公開(kāi):
@ToString使用@ToString會(huì)生成toString()方法,它會(huì)按順序依次打印類名、字段;若想忽略輸出字段,則可以用exclude設(shè)置參數(shù);如果有繼承父類,可以設(shè)置callSuper為true讓其調(diào)用父類toString()方法:
@ToString(exclude = "password", callSuper = true) public class User extends BaseEntity { private @Getter @Setter String name; private @Getter @Setter String password; }@EqualsAndHashCode
使用@EqualsAndHashCode會(huì)生成hashCode()和equals()方法,默認(rèn)會(huì)使用所有非靜態(tài)、非transient字段;
如果想排除某些字段可設(shè)置exclude參數(shù);
如果有繼承父類,可以設(shè)置callSuper為true讓其調(diào)用父類生成的equals()和hashCode方法,但是當(dāng)沒(méi)有繼承父類并設(shè)置callSuper為true時(shí)會(huì)在編譯時(shí)報(bào)錯(cuò):
import lombok.*; @EqualsAndHashCode(exclude = "password") public class User { private @Getter @Setter String name; private @Getter @Setter String password; @EqualsAndHashCode(callSuper = true) public static class Department extends BaseEntity { private @Getter @Setter String departmentName; } }
在Intellij IDEA的Structure欄中可查看到有equals()和hashCode()方法:
@NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor生成一個(gè)無(wú)參數(shù)構(gòu)造函數(shù):
生成構(gòu)造函數(shù);如果帶有參數(shù),則該參數(shù)必須是以final修飾并未初始化的字段或@NonNull注解的并未初始化的字段,參數(shù)的順序和字段在類中的聲明順序一致。
以@NonNull注解并未初始化的:
以final修飾并未初始化的:
正確和錯(cuò)誤示例:
生成全參數(shù)構(gòu)造函數(shù),將類中的每個(gè)字段生成帶有1個(gè)參數(shù)的構(gòu)造函數(shù),例如有3個(gè)字段,則構(gòu)造函數(shù)的參數(shù)為3個(gè):
@Data@Data包含了@ToString, @EqualsAndHashCode, @Getter, @Setter, @RequiredArgsConstructor的功能:
@Builder@Builder為類、構(gòu)造器、方法上生成復(fù)雜的構(gòu)建器API;構(gòu)造實(shí)例時(shí),其屬性不再需要多帶帶set,可以通過(guò)以下方式進(jìn)行實(shí)例化:
Person.builder().name("Adam Savage").city("San Francisco").job("Mythbusters").job("Unchained Reaction").build();
val、@Cleanup、@SneakyThrows、@Synchronized、@Getter(lazy=true)、@Log、experimental等就不再做介紹,用法和說(shuō)明可查看官網(wǎng)文檔https://projectlombok.org/features/all。
總結(jié)使用lombok能夠?yàn)槲覀兪∪ナ謩?dòng)創(chuàng)建getter和setter方法的麻煩,lombok 有助于代碼的整潔、效率的提高以及冗余的減少,但也同時(shí)降低了源代碼文件的可讀性和完整性。
不可過(guò)度依賴lombok。
參考以簡(jiǎn)單的方式消除 Java 的冗長(zhǎng)
Lombok features
lombok
原文地址:https://www.lwhweb.com/2017/11/08/lombok-use/
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/70823.html
摘要:雖然有人可能會(huì)說(shuō)里面都自帶自動(dòng)生成這些方法的功能,但是使用會(huì)使你的代碼看起來(lái)更加簡(jiǎn)潔,寫(xiě)起來(lái)也更加方便。使用不使用自動(dòng)生成方法使用不使用自動(dòng)生成無(wú)參數(shù)構(gòu)造函數(shù)。 一、lombok簡(jiǎn)介 lombok是在學(xué)習(xí)過(guò)程中發(fā)現(xiàn)的一個(gè)非常好用的小工具,用了之后感覺(jué)的確很不錯(cuò),所以特此來(lái)推薦一下。 lombok的官方地址:https://projectlombok.org/ lombok的Github...
摘要:提高編碼效率使代碼更簡(jiǎn)潔消除冗長(zhǎng)代碼避免修改字段名字時(shí)忘記修改方法名提高下逼格以上就是的優(yōu)點(diǎn),當(dāng)然,的優(yōu)點(diǎn)遠(yuǎn)遠(yuǎn)不止以上幾點(diǎn),使用,你可以更加優(yōu)雅高效的編輯代碼。實(shí)戰(zhàn)完成了上述準(zhǔn)備之后,就可以愉快的使用進(jìn)行編碼了。接下來(lái)是使用簡(jiǎn)化后的代碼。 Lombok介紹 近來(lái)偶遇一款擼碼神器,介紹給大家~相信許多小伙伴都深有體會(huì),POJO類中的千篇一律的getter/setter,construct...
摘要:使用,簡(jiǎn)化代碼為了簡(jiǎn)化與,提供了一種機(jī)制,幫助我們自動(dòng)生成這些樣板代碼。但是,在實(shí)際項(xiàng)目中,完全沒(méi)有使用到。源碼審查是一個(gè)源碼審查工具。最新版已經(jīng)支持的全部注解,不再認(rèn)為是沒(méi)有使用的變量。 一個(gè)典型的 Java 類 public class A { private int a; private String b; public int getA() { ret...
摘要:什么是一言以蔽之是一種工具,提供了簡(jiǎn)單的注解來(lái)簡(jiǎn)化我們的重復(fù)冗長(zhǎng)代碼。但在實(shí)際的項(xiàng)目中,我們常常只在定義的時(shí)候用上,而在業(yè)務(wù)代碼中很少用到??偨Y(jié)是個(gè)非常有用的工具,能夠幫助我們精簡(jiǎn)很多臃腫冗長(zhǎng)的代碼,不過(guò)也有其局限性,推薦在定義中使用。 什么是Lombok 一言以蔽之:lombok是一種工具,提供了簡(jiǎn)單的注解來(lái)簡(jiǎn)化我們的重復(fù)冗長(zhǎng)Java代碼。比如一個(gè)Java Bean,注解了lombo...
摘要:使用方法能以簡(jiǎn)單的注解形式來(lái)簡(jiǎn)化代碼,提高開(kāi)發(fā)人員的開(kāi)發(fā)效率。能通過(guò)注解的方式,在編譯時(shí)自動(dòng)為屬性生成構(gòu)造器方法。出現(xiàn)的神奇就是在源碼中沒(méi)有和方法,但是在編譯生成的字節(jié)碼文件中有和方法。沒(méi)法實(shí)現(xiàn)多種參數(shù)構(gòu)造器的重載。 1 Lombok背景介紹 官方介紹如下: Project Lombok makes java a spicier language by addi...
閱讀 2132·2019-08-30 15:52
閱讀 2507·2019-08-29 18:37
閱讀 865·2019-08-29 12:33
閱讀 2909·2019-08-29 11:04
閱讀 1637·2019-08-27 10:57
閱讀 2160·2019-08-26 13:38
閱讀 2834·2019-08-26 12:25
閱讀 2521·2019-08-26 12:23