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