Lombok,一种编译时Java注释预处理器,可最大程度地减少代码大小
在本文中,我們將看到如何在常規Java代碼中使用lombok來最小化代碼長度和冗余。
什么是Lombok?
Lombok,一個編譯時注釋預處理器,有助于在編譯時注入一些代碼。 在詳細介紹之前,我要求您應該從他們的網站上觀看視頻。 我不會像這樣進行現場演示,但是我將展示如何在項目內部使用它(包括Maven生命周期)。
讓我們從基本的了解開始。 如我所知,lombok是一個編譯時注釋預處理器。 那是什么意思
 ->它將在編譯時起作用(我們可以在編寫代碼時看到效果) 
 ->在編譯過程中(使用javac命令執行)我們需要類路徑中的依賴項 
 ->我們需要插件支持才能在編碼時看到IDE的效果。(因為IDE在編碼/保存過程中會進行編譯) 
Lombok有幾個實用程序/功能。 我們將介紹到目前為止我使用過的主要項目。
注意:要了解批注,您可能會看到我的這篇文章。
安裝方式:
Eclipse:從此鏈接下載并安裝(您需要顯示eclipse安裝目錄)
(我已經檢查了STS / eclipse版本:3.7.3.RELEASE)
Intellij IDEA:只需安裝lombok插件。 (文件->設置->插件->搜索/瀏覽以查看,然后安裝)
或: 插件鏈接
現在:基于IDE行為,您可能需要啟用注釋預處理器才能使插件正常工作。 (通常現代IDE具有此默認設置)
從Eclipse:
IntelliJ IDEA:
項目設置:
我將使用Maven(您可以以相同的方式使用gradle)。 我的Maven版本是3.3.9。
步驟1:在pom.xml中,添加依賴項
dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.16.8</version></dependency> </dependencies>您可能會從Maven Central獲得更新的版本。
步驟2:如我們所見,lombok是編譯時預處理器,因此,我們需要編譯器。 因此,在build-> plugins-> plugin內添加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>可以看到,我已將源和目標版本定義為1.8。
步驟3:現在我們需要添加lombok插件以在項目編譯期間工作。 為此,我們需要在插件管理中輸入內容,并在構建部分添加帶有參數的插件。
<pluginManagement><plugins><plugin><groupId>org.projectlombok</groupId><artifactId>lombok-maven-plugin</artifactId><version>1.16.8.0</version></plugin></plugins> </pluginManagement>用參數添加插件
<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個目標 ,這些是為測試和源范圍定義為lombok定義的空間目標。 我同時使用兩者,因為我的測試代碼也需要lombok。 
因此,我的構建部分就是這個。
<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>并且,對于日志記錄,我們需要具有依賴性。 我將添加所有類型的日志示例。 所以將所有這些加在一起
<!--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的構建部分如下所示 。
現在,該看一下每個功能的用法了:
注意:對于eclipse和IntelliJ,我都使用“大綱視圖”來查看效果。 要啟用大綱:
Eclipse:窗口->顯示視圖->大綱
IntelliJ:查看->工具按鈕,將進行結構化。
@Getter @Setter:它使帶有變量的getter setter變得麻木。 它還支持訪問級別參數,以定義getter和setter的范圍。
 參數:采用枚舉參數AccessLevel 
 PUBLIC =可公開訪問 
 MODULE,PACKAGE =與默認值相同(不使用任何修飾符) 受保護=與受保護相同 私人=與私人相同 NONE =不會執行 
 在課堂上: 
  
 覆蓋類級別的getter:  @ToString:這是toString()的實現,我們只能用于類級別。 
參數:
 includeFieldNames():布爾類型=>定義所有字段包含 
 callSuper():布爾類型=>調用super 
 doNotUseGetters():布爾類型=>避免使用字段的獲取器。 exclude():字段名稱的字符串數組=>定義字段排除 of():字段名稱的字符串數組=>定義要添加的字段(顯式) 
 @Data:它是多個注釋的組合。 
 哪里:我們可以在類/類型之前使用 
參數:
 注意:數據包括 
 1. @Getter, 
 2. @Setter。 3. @RequiredArgsConstructor 4. @Tostring 5. @EqualsAndHashCode 
范例:
 蝕: 
  
IntelliJ:
@Value:這只是@Data的不可變值類型。
參數:staticConstructor條目將默認構造函數設為私有
@Builder:向您的班級添加默認的構建器類。 它只是一個構建器(如構建器模式,帶有參數,請參見圖像中的示例)
 @Singular:用于通知集合(僅支持guava和Java util)。 它包括2種加法器方法,一次添加,全部添加。 
  
val:這使局部最終變量(內部方法)
(緊接在this()或super()之后)
用途:
1.像var(js / c#)一樣使用,它將作為最終版本
2.在foreach循環中。
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:這將對變量添加null檢查,并引發null指針異常。 
使用范圍:方法,參數,局部變量
 無需檢查 
  
與@NotNull
@EqualsAndHashCode:它簡單地將equals(Object other)和hashCode()添加到類中。 (因此它是類級別的注釋)。
它支持參數以自定義那些equals和哈希碼方法。 所有參數均與@ToString相同。
@Cleanup:這是清理資源的簡單方法。 實際上,它確保資源try()方法將在try的finally塊中調用。
僅局部變量:
調用資源的關閉方法。 如果您有另一個方法名稱,則需要調用value = thatMehtodName(例如exit)
您可以從這里看到一個簡單的示例。 無需嘗試捕獲。
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();} }注意:我認為,當您不關心管理資源時,最好使用此功能。 如果您想按邏輯使用資源,最好避免這種情況。 例如,多線程資源的用法。
使用lombok記錄:
@log:這是最好的可用功能之一。 此圖顯示了要收集的所有記錄器。 我在github中的示例將顯示詳細信息。
我們需要在上課之前設置日志,僅此而已。 它會提供一個靜態變量日志,我們可以根據使用的日志類型來使用它。
Parameter:它將主題作為參數,默認情況下是類名。 我們可以設置日志主題。
注意:對于不同的日志實現,我們需要不同類型的配置。 Lombok不提供任何配置幫助,僅注入代碼。 因此,我們需要添加取決于我添加的日志類型。
我在github中的示例包含所有6種日志配置類型。 仔細查看pom文件,以了解依賴關系以及配置文件的資源。
Lombok示例github鏈接 :https://github.com/sarkershantonu/practice-projects/tree/master/lombok-examples
注意:由于沒有測試范圍,我跳過了更多常規功能和實驗功能(在空間上為@Synchronized)。 我將在github存儲庫中一一添加其他內容,并在此處添加參考注釋。
翻譯自: https://www.javacodegeeks.com/2016/06/lombok-compile-time-java-annotation-preprocessor-minimize-code-size.html
總結
以上是生活随笔為你收集整理的Lombok,一种编译时Java注释预处理器,可最大程度地减少代码大小的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 158是什么意思 158有哪些含义
- 下一篇: 哈希扩展长度攻击_哈希长度扩展攻击
