摘要:使用,簡化代碼為了簡化與,提供了一種機制,幫助我們自動生成這些樣板代碼。但是,在實際項目中,完全沒有使用到。源碼審查是一個源碼審查工具。最新版已經支持的全部注解,不再認為是沒有使用的變量。
一個典型的 Java 類
public class A { private int a; private String b; public int getA() { return a; } public String getB() { return b; } public void setA(int a) { this.a = a; } public void setB(String b) { this.b = b; } }
對于這樣一個簡單的 Java 類,我們通常需要給每個屬性寫getter和setter,而這種實際上沒有什么太大的意義。當然,如果有的公司或團隊使用代碼行數評估工作量,還是多寫幾行吧;同時,可以考慮一下我們團隊。
使用 lombok,簡化代碼為了簡化getter與setter,lombok 提供了一種機制,幫助我們自動生成這些樣板代碼。以上的代碼,如果使用lombok的話,將變得很簡單:
@lombok.Getter @lombok.Setter public class A { private int a; private String b; }
顧名思義,lombok.Getter就是生成getter,lombok.Setter就是生成setter。但是,這樣真的就可以了么?編譯下,讓我們看看生成的二進制代碼。(請自行下載lombok.jar)
命令行> javac -cp lombok.jar A.java 命令行> javap -c A.class
輸出結果略。可以看到完全一樣。
更進一步,如果在編譯的時候,加入-g:none選項,甚至可以看到生成的文件完全一樣。
簡單使用雖然我們可以在編譯的時候,加入classpath,但是,一般來說,在各類IDE中使用,還是需要特殊處理一下。
Maven加上依賴就好。同時,由于lombok只在編譯期才處理,所以并不需要在運行時有這個依賴,可以把scope定義為provided。
org.projectlombok lombok 1.16.8 provided
值得注意的是,maven的maven-compiler-plugin低版本和lombok高版本不兼容,目前已知maven-compiler-plugin的2.3.X與lombok的1.6.X不兼容。這個需要了解lombok的原理才能進一步說明。
Eclipse由于eclipse的默認編譯器并不是javac,所以,需要額外安裝,基本就是改下引導參數,可以直接運行jar包,或者手動在eclipse.ini里加上參數-Xbootclasspath/a:lombok.jar -javaagent:lombok.jar。
IDEA IntelliJ雖然IDEA IntelliJ默認使用javac作為編譯器,理論上可以不裝插件。可是,跳轉等特性也隨之沒了。所以,還是安裝個插件吧,直接去倉庫里搜索lombok就成。
如果項目中使用高級配置,需要額外注意一下。雖然在編譯的時候,lombok配置文件可以在任何能找到的目錄,但是,lombok-intellij插件默認并不支持在任何目錄,如果有配置文件,建議放在java的源代碼根目錄中。
更多 lombok 注解lombok 目前最新版本為 1.16.8,個人覺得比較常用的有以下幾種,更多請查看官網。
@val
如果你要定義一個final的變量,并且不想寫類型,這個可以幫到你。但是,在實際項目中,完全沒有使用到。
@NonNull
這個在參數中使用,如果調用時傳了null,就直接拋空指針。
@Data
@ToString、@EqualsAndHashCode、@Getter、@Setter和@RequiredArgsConstructor注解的集合。
@Getter與@Setter
作用于屬性和類上,自動生成屬性的getXXX()和setXXX()方法。若在類上,則對所有屬性有效。并可通過AccessLevel參數控制方法的訪問級別。
@ToString
作用于類,自動重寫類的ToString()方法。常用的參數有exclude(指定方法中不包含的屬性)、callSuper(方法中是否包含父類ToString()方法返回的值)
@EqualsAndHashCode
作用于類,自動重寫類的equals()、hashCode()方法。常用的參數有exclude(指定方法中不包含的屬性)、callSuper(方法中是否包含父類ToString()方法返回的值)
@NoArgsConstructor, @RequiredArgsConstructor和@AllArgsConstructor
作用于類,@NoArgsConstructor自動生成不帶參數的構造方法;@RequiredArgsConstructor自動生成帶參數的構造方法,主要針對一些需要特殊處理的屬性,比如未初始化的final屬性;@AllArgsConstructor自動生成包含所有屬性的構造方法。
@Synchronized
作用于方法,可鎖定指定的對象,如果不指定,則默認創建創建一個對象鎖定。
@Log,或者直接@Slf4j
作用于類,具體包含@CommonsLog、@Log、@Log4j、@Log4j2、@Slf4j和@XSlf4j,分別對用不同的日志系統。利用此類注解,可為類創建一個log屬性。
sonar源碼審查sonar是一個源碼審查工具。最新版5.X已經支持lombok的全部注解,不再認為是沒有使用的變量。但是,舊的4.X還是認為沒有使用這些變量。可以后向移植這些包,或者應用多帶帶的補丁。
原理呃,真的有人想看原理么?如果想,請留言,以后再發。
參考文獻lombok, lombok 官網,但是,目前沒有發現哪里可以捐贈
sonar, sonar 官網,對代碼規范有一些建議
sonar-java, sonar-java 低版本插件,支持lombok
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/65918.html
摘要:權限中心的依賴聲明聲明依賴關系檢查代碼規范聲明開發依賴命名空間檢查代碼規范,執行單元測試。單元測試持續交付一切都如此的完美,沒有測試,又如何可以證明這件事情的完美,又如何可以保障交付的質量。 序 權限管理是無線運營系統中的核心模塊,通過訪問控制策略的配置,來約定人與資源的訪問關系。 本文著重講解如何通過PHP來構建一個靈活、通用、安全的權限管理系統。 關于權限 首先我們來聊聊權限。 權...
摘要:的本質是團隊博客,關注互聯網創業技術,每周推薦篇優質文章。堅持爭取做到每周更新,與讀者一起進步。第十一期第十期第九期第八期第七期第六期第五期第四期第三期切換至,第二期發布。創刊,用發布了第一次。 Tuniu Weekly Inspired By 《灣區日報》 我們團隊也想基于這種模式,讓大家感受到技術的人文。 《Tuniu Weekly》就這樣產生了。 《Tuniu Weekly》...
摘要:認為權限授權實際上是的問題。具體的權限,正向授權與負向授權。應用建模業務場景權限管理鑒權設計應用建模系統架構上支撐權限系統靈活配置,不僵硬字段,不僵硬行為,基于各種業務權限管控的特征靈活設計。表示許可權與角色之間多對多的指派關系。 序 之前寫過一篇大話權限中心的PHP架構之道,主要是從軟件工程角度介紹,如何通過編碼規范、依賴管理、數據源架構、事務處理、單元測試等技術,來保障權限系統的高...
摘要:認為權限授權實際上是的問題。具體的權限,正向授權與負向授權。應用建模業務場景權限管理鑒權設計應用建模系統架構上支撐權限系統靈活配置,不僵硬字段,不僵硬行為,基于各種業務權限管控的特征靈活設計。表示許可權與角色之間多對多的指派關系。 序 之前寫過一篇大話權限中心的PHP架構之道,主要是從軟件工程角度介紹,如何通過編碼規范、依賴管理、數據源架構、事務處理、單元測試等技術,來保障權限系統的高...
摘要:使用可以大大減少代碼行數,提高開發效率。提供了日志工具無參構造器提供方法提供方法方法有參構造器,參數按屬性定義順序傳入提供了空指針檢測,會拋出異常 lombok 是一個第三方工具,提供了一些注解功能,可以幫助我們消除冗余、臃腫的 Java 代碼,比如 POJO 的 getter/setter 方法、構造方法、hashcode 方法等。lombok 在編譯時根據注解生成具體的代碼,在虛擬...
閱讀 2078·2021-11-23 10:13
閱讀 2788·2021-11-09 09:47
閱讀 2737·2021-09-22 15:08
閱讀 3312·2021-09-03 10:46
閱讀 2230·2019-08-30 15:54
閱讀 909·2019-08-28 18:09
閱讀 2429·2019-08-26 18:26
閱讀 2341·2019-08-26 13:48