溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java有哪些好用的工具

發(fā)布時(shí)間:2021-11-19 15:55:19 來(lái)源:億速云 閱讀:172 作者:iii 欄目:編程語(yǔ)言

這篇文章主要介紹“Java有哪些好用的工具”,在日常操作中,相信很多人在Java有哪些好用的工具問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Java有哪些好用的工具”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

1、JavaPoet

有時(shí)候,我們要做一些代碼生成工具,需要生成一些Java類源文件。如果使用字符串去拼接的話,很容易拼的亂七八糟。為了解放雙手,就可以使用工具JavaPoet進(jìn)行方法或者代碼塊的構(gòu)建。它還提供了占位符等一系列方便的操作,使得你生成的代碼優(yōu)美可讀,清脆爽口。

特別在寫(xiě)一些框架的時(shí)候,可以將一些非常臟、非常累的活兒交給它。

代碼示例。

MethodSpec main = MethodSpec.methodBuilder("main") .addStatement("int total =  0") .beginControlFlow("for(int i=0;i<10;i++)") .addStatement("total +=i;")  .endControlFlow() .build();

2、JavaCC

JavaCC是一個(gè)語(yǔ)法生成器和語(yǔ)法分析器,可以通過(guò)讀取一個(gè).jj(它是雞雞我是姐姐)描述文件來(lái)生成一個(gè)Java文件。聽(tīng)起來(lái)和JavaPoet一樣,但它是語(yǔ)法層面的,過(guò)程是翻譯而不是“構(gòu)造”,和我們學(xué)習(xí)的編譯原理是一個(gè)層面的東西。而且JavaCC生成的文件一般是不可讀的,誰(shuí)讓它和yacc以及l(fā)ex比較像呢。

Java有哪些好用的工具

如果你想要自定義一些表達(dá)式,或者做一個(gè)特殊格式的解析器,你可能會(huì)用到它。

與此類似的還有ANTLR。應(yīng)用方面,Velocity和FreeMarker都使用JavaCC作為語(yǔ)法解釋器;Hibernate則使用ANTLR作為HQL的語(yǔ)法解釋器。

不過(guò)我還是更喜歡Ragel(不是Java的)多一些。對(duì)于這些場(chǎng)景來(lái)說(shuō),文件生成以后就不再依賴這些工具了,還是高效和好用更重要。

2、Javaparser

上面是通過(guò)語(yǔ)法樹(shù)生成Java文件(或者其他文件),Javaparser是通過(guò)Java文件生成語(yǔ)法樹(shù)(AST),然后基于這棵語(yǔ)法樹(shù)進(jìn)行Java代碼的分析和修改。注意,它可以直接再根據(jù)語(yǔ)法樹(shù),反向生成Java文件哦。

根據(jù)這棵語(yǔ)法樹(shù),你可以直接分析一個(gè)獨(dú)立的Java文件,即使這個(gè)Java文件亂七八糟,不能通過(guò)編譯,不用在運(yùn)行時(shí)使用反射等功能。配合JavaPoet可以去做一些非常有意思的功能。比如,Javaparser提取Java文件的注釋或者注解,然后通過(guò)JavaPoet生成一些自動(dòng)文檔(Swagger),或者進(jìn)行測(cè)試用例的自動(dòng)填充。

除了這些,Javaparser可以規(guī)定十分嚴(yán)格的語(yǔ)法格式,所以使用它做一個(gè)代碼審查工具,甚至是做一些代碼依賴分析,也是可以的。

4、Lombok

其實(shí)這只是個(gè)輔助開(kāi)發(fā)工具,應(yīng)該有很多研發(fā)用起來(lái)了,它可以顯著的減少代碼量。讓我們擺脫惱人的get、set、hashCode、equals,甚至log等。

Lombok其實(shí)部分上和上面說(shuō)到的Javaparser類似,不過(guò)它是JDK層面的。

在javac將Java文件解析成抽象語(yǔ)法樹(shù)之后(AST),Lombok則根據(jù)自己的注解處理器,動(dòng)態(tài)的修改AST,增加新的節(jié)點(diǎn)代碼。然后,生成我們最終的字節(jié)碼。

這個(gè)技術(shù),是由javac的注解API來(lái)實(shí)現(xiàn)的(JSR-269),可以讓javac在編譯期去干一些事情。

Java有哪些好用的工具

JDK做的工作,遠(yuǎn)比我們表面上用到的那些多的多。

5、ByteBuddy

上面幾個(gè)工具都是把一些其他方式的代碼轉(zhuǎn)化為Java源文件,這些Java源文件還需要經(jīng)過(guò)編譯這道工序,才能夠被真正使用。

Java有哪些好用的工具

ByteBuddy可以更進(jìn)一步,直接動(dòng)態(tài)生成Java類。對(duì),就是直接加載在元空間的那種,在程序運(yùn)行期間就可以動(dòng)態(tài)的對(duì)class進(jìn)行更改。不需要曲徑通幽,直達(dá)目的。

它的底層是ASM,所以ByteBuddy是可以直接修改字節(jié)碼的,是一種字節(jié)碼增強(qiáng)工具。

于此類似的工具還有JAVASIST、CGLiB等。

如果你在做一些代理類的工作,或者做一些APM等,想要實(shí)現(xiàn)類似Aspectj之類的功能,再或者類似Arthas那樣的故障排查工具,那這些工具正適合。

到此,關(guān)于“Java有哪些好用的工具”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI