日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

Lombok,一种编译时Java注释预处理器,可最大程度地减少代码大小

發(fā)布時(shí)間:2023/12/3 java 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Lombok,一种编译时Java注释预处理器,可最大程度地减少代码大小 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在本文中,我們將看到如何在常規(guī)Java代碼中使用lombok來(lái)最小化代碼長(zhǎng)度和冗余。

什么是Lombok?

Lombok,一個(gè)編譯時(shí)注釋預(yù)處理器,有助于在編譯時(shí)注入一些代碼。 在詳細(xì)介紹之前,我要求您應(yīng)該從他們的網(wǎng)站上觀看視頻。 我不會(huì)像這樣進(jìn)行現(xiàn)場(chǎng)演示,但是我將展示如何在項(xiàng)目?jī)?nèi)部使用它(包括Maven生命周期)。

讓我們從基本的了解開(kāi)始。 如我所知,lombok是一個(gè)編譯時(shí)注釋預(yù)處理器。 那是什么意思

->它將在編譯時(shí)起作用(我們可以在編寫(xiě)代碼時(shí)看到效果)
->在編譯過(guò)程中(使用javac命令執(zhí)行)我們需要類路徑中的依賴項(xiàng)
->我們需要插件支持才能在編碼時(shí)看到IDE的效果。(因?yàn)镮DE在編碼/保存過(guò)程中會(huì)進(jìn)行編譯)

Lombok有幾個(gè)實(shí)用程序/功能。 我們將介紹到目前為止我使用過(guò)的主要項(xiàng)目。

注意:要了解批注,您可能會(huì)看到我的這篇文章。

安裝方式:

Eclipse:從此鏈接下載并安裝(您需要顯示eclipse安裝目錄)

(我已經(jīng)檢查了STS / eclipse版本:3.7.3.RELEASE)

Intellij IDEA:只需安裝lombok插件。 (文件->設(shè)置->插件->搜索/瀏覽以查看,然后安裝)

或: 插件鏈接

現(xiàn)在:基于IDE行為,您可能需要啟用注釋預(yù)處理器才能使插件正常工作。 (通常現(xiàn)代IDE具有此默認(rèn)設(shè)置)

從Eclipse:

IntelliJ IDEA:

項(xiàng)目設(shè)置:

我將使用Maven(您可以以相同的方式使用gradle)。 我的Maven版本是3.3.9。

步驟1:在pom.xml中,添加依賴項(xiàng)

dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.16.8</version></dependency> </dependencies>

您可能會(huì)從Maven Central獲得更新的版本。

步驟2:如我們所見(jiàn),lombok是編譯時(shí)預(yù)處理器,因此,我們需要編譯器。 因此,在build-> plugins-> plugin內(nèi)添加maven編譯器插件

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><compilerVersion>1.8</compilerVersion><source>1.8</source><target>1.8</target></configuration> </plugin>

可以看到,我已將源和目標(biāo)版本定義為1.8。

步驟3:現(xiàn)在我們需要添加lombok插件以在項(xiàng)目編譯期間工作。 為此,我們需要在插件管理中輸入內(nèi)容,并在構(gòu)建部分添加帶有參數(shù)的插件。

<pluginManagement><plugins><plugin><groupId>org.projectlombok</groupId><artifactId>lombok-maven-plugin</artifactId><version>1.16.8.0</version></plugin></plugins> </pluginManagement>

用參數(shù)添加插件

<plugin><groupId>org.projectlombok</groupId><artifactId>lombok-maven-plugin</artifactId><version>1.16.8.0</version><configuration><encoding>UTF-8</encoding></configuration><executions><execution><phase>generate-sources</phase><goals><goal>testDelombok</goal><goal>delombok</goal></goals></execution></executions> </plugin>

這里的空間注釋:

1.編碼是必要的
2.您可以看到我使用了2個(gè)目標(biāo) ,這些是為測(cè)試和源范圍定義為lombok定義的空間目標(biāo)。 我同時(shí)使用兩者,因?yàn)槲业臏y(cè)試代碼也需要lombok。

因此,我的構(gòu)建部分就是這個(gè)。

<build><pluginManagement><plugins><plugin><groupId>org.projectlombok</groupId><artifactId>lombok-maven-plugin</artifactId><version>1.16.8.0</version></plugin></plugins></pluginManagement><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><compilerVersion>1.8</compilerVersion><source>1.8</source><target>1.8</target></configuration></plugin><plugin><groupId>org.projectlombok</groupId><artifactId>lombok-maven-plugin</artifactId><version>1.16.8.0</version><configuration><encoding>UTF-8</encoding></configuration><executions><execution><phase>generate-sources</phase><goals><goal>testDelombok</goal><goal>delombok</goal></goals></execution></executions></plugin></plugins> </build>

并且,對(duì)于日志記錄,我們需要具有依賴性。 我將添加所有類型的日志示例。 所以將所有這些加在一起

<!--Logging external dependencies--><dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.2</version> </dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.21</version> </dependency> <dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.21</version> </dependency> <dependency><groupId>org.slf4j</groupId><artifactId>slf4j-ext</artifactId><version>1.7.21</version> </dependency> <dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-slf4j-impl</artifactId><version>2.5</version> </dependency>

因此,最后我的POM的構(gòu)建部分如下所示 。

現(xiàn)在,該看一下每個(gè)功能的用法了:

注意:對(duì)于eclipse和IntelliJ,我都使用“大綱視圖”來(lái)查看效果。 要啟用大綱:

Eclipse:窗口->顯示視圖->大綱

IntelliJ:查看->工具按鈕,將進(jìn)行結(jié)構(gòu)化。

@Getter @Setter:它使帶有變量的getter setter變得麻木。 它還支持訪問(wèn)級(jí)別參數(shù),以定義getter和setter的范圍。

參數(shù):采用枚舉參數(shù)AccessLevel
PUBLIC =可公開(kāi)訪問(wèn)
MODULE,PACKAGE =與默認(rèn)值相同(不使用任何修飾符) 受保護(hù)=與受保護(hù)相同 私人=與私人相同 NONE =不會(huì)執(zhí)行

在課堂上:

覆蓋類級(jí)別的getter: @ToString:這是toString()的實(shí)現(xiàn),我們只能用于類級(jí)別。

參數(shù):

includeFieldNames():布爾類型=>定義所有字段包含
callSuper():布爾類型=>調(diào)用super
doNotUseGetters():布爾類型=>避免使用字段的獲取器。 exclude():字段名稱的字符串?dāng)?shù)組=>定義字段排除 of():字段名稱的字符串?dāng)?shù)組=>定義要添加的字段(顯式)

@Data:它是多個(gè)注釋的組合。
哪里:我們可以在類/類型之前使用

參數(shù):

注意:數(shù)據(jù)包括
1. @Getter,
2. @Setter。 3. @RequiredArgsConstructor 4. @Tostring 5. @EqualsAndHashCode

范例:

蝕:

IntelliJ:

@Value:這只是@Data的不可變值類型。

參數(shù):staticConstructor條目將默認(rèn)構(gòu)造函數(shù)設(shè)為私有

@Builder:向您的班級(jí)添加默認(rèn)的構(gòu)建器類。 它只是一個(gè)構(gòu)建器(如構(gòu)建器模式,帶有參數(shù),請(qǐng)參見(jiàn)圖像中的示例)

@Singular:用于通知集合(僅支持guava和Java util)。 它包括2種加法器方法,一次添加,全部添加。

val:這使局部最終變量(內(nèi)部方法)

(緊接在this()或super()之后)

用途:

1.像var(js / c#)一樣使用,它將作為最終版本

2.在foreach循環(huán)中。

public class ValExample {val items;public void aMethod() {val store = new Hashtable<String, String>();store.put("one", new String("Shantonu"));val func = store.get("one");System.out.println(func.toLowerCase());store.put("two", "Andrii");store.put("three", "Oleks");for(val v: store.entrySet()){System.out.println("KEY =" +v.getKey()+", VAL = "+ v.getValue());}} }


@NotNull:這將對(duì)變量添加null檢查,并引發(fā)null指針異常。

使用范圍:方法,參數(shù),局部變量

無(wú)需檢查

與@NotNull

@EqualsAndHashCode:它簡(jiǎn)單地將equals(Object other)和hashCode()添加到類中。 (因此它是類級(jí)別的注釋)。

它支持參數(shù)以自定義那些equals和哈希碼方法。 所有參數(shù)均與@ToString相同。

@Cleanup:這是清理資源的簡(jiǎn)單方法。 實(shí)際上,它確保資源try()方法將在try的finally塊中調(diào)用。

僅局部變量:

調(diào)用資源的關(guān)閉方法。 如果您有另一個(gè)方法名稱,則需要調(diào)用value = thatMehtodName(例如exit)

您可以從這里看到一個(gè)簡(jiǎn)單的示例。 無(wú)需嘗試捕獲。

public class CleanupEx {public static void main(String[] args) throws IOException {String pom = System.getProperty("user.dir") + "/pom.xml";String io = System.getProperty("user.dir") + "/logs/io.txt";@Cleanup InputStream in = new FileInputStream(pom);@Cleanup OutputStream out = new FileOutputStream(io);int reading;char c;while ((reading=in.read())!=-1){c=(char)reading;out.write(c);}out.flush();} }

注意:我認(rèn)為,當(dāng)您不關(guān)心管理資源時(shí),最好使用此功能。 如果您想按邏輯使用資源,最好避免這種情況。 例如,多線程資源的用法。

使用lombok記錄:

@log:這是最好的可用功能之一。 此圖顯示了要收集的所有記錄器。 我在github中的示例將顯示詳細(xì)信息。

我們需要在上課之前設(shè)置日志,僅此而已。 它會(huì)提供一個(gè)靜態(tài)變量日志,我們可以根據(jù)使用的日志類型來(lái)使用它。

Parameter:它將主題作為參數(shù),默認(rèn)情況下是類名。 我們可以設(shè)置日志主題。

注意:對(duì)于不同的日志實(shí)現(xiàn),我們需要不同類型的配置。 Lombok不提供任何配置幫助,僅注入代碼。 因此,我們需要添加取決于我添加的日志類型。

我在github中的示例包含所有6種日志配置類型。 仔細(xì)查看pom文件,以了解依賴關(guān)系以及配置文件的資源。

Lombok示例github鏈接 :https://github.com/sarkershantonu/practice-projects/tree/master/lombok-examples

注意:由于沒(méi)有測(cè)試范圍,我跳過(guò)了更多常規(guī)功能和實(shí)驗(yàn)功能(在空間上為@Synchronized)。 我將在github存儲(chǔ)庫(kù)中一一添加其他內(nèi)容,并在此處添加參考注釋。

翻譯自: https://www.javacodegeeks.com/2016/06/lombok-compile-time-java-annotation-preprocessor-minimize-code-size.html

總結(jié)

以上是生活随笔為你收集整理的Lombok,一种编译时Java注释预处理器,可最大程度地减少代码大小的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。