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