最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java使用lombok消除冗余代碼的方法步驟

 更新時(shí)間:2020年11月04日 11:15:56   作者:pengjunlee  
這篇文章主要介紹了Java使用lombok消除冗余代碼的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、項(xiàng)目背景

在寫Java程序的時(shí)候經(jīng)常會遇到如下情形:

新建了一個(gè)Class類,然后在其中設(shè)置了幾個(gè)字段,最后還需要花費(fèi)很多時(shí)間來建立getter和setter方法。

lombok項(xiàng)目的產(chǎn)生就是為了省去我們手動創(chuàng)建getter和setter方法的麻煩,它能夠在我們編譯源碼的時(shí)候自動幫我們生成getter和setter方法。即它最終能夠達(dá)到的效果是:在源碼中沒有g(shù)etter和setter方法,但是在編譯生成的字節(jié)碼文件中有g(shù)etter和setter方法。

比如源碼文件: 

import java.io.Serializable; 
  
import lombok.Data; 
  
@Data 
public class BasicClusterInfo implements Serializable { 
  
  private static final long serialVersionUID = 3478135817352393604L; 
  private String      hbaseKey; 
  private int        receiverCount; 
} 

以下是編譯上述源碼文件得到的字節(jié)碼文件,對其反編譯得到的結(jié)果  

public class BasicClusterInfo extends java.lang.Object implements java.io.Serializable{ 
  public BasicClusterInfo(); 
  public java.lang.String getHbaseKey(); 
  public int getReceiverCount(); 
  public void setHbaseKey(java.lang.String); 
  public void setReceiverCount(int); 
  public boolean equals(java.lang.Object); 
  public boolean canEqual(java.lang.Object); 
  public int hashCode(); 
  public java.lang.String toString(); 
} 

二、eclipse安裝lombok

為IDE安裝lombok插件非常簡單,以eclipse環(huán)境為例,其安裝過程分為以下幾個(gè)步驟:

1)下載lombok.jar包
            lombok的官網(wǎng)地址:https://projectlombok.org/
            lombok的下載地址:https://projectlombok.org/download.html
            lombok項(xiàng)目的Github地址:https://github.com/rzwitserloot/lombok

2)運(yùn)行l(wèi)ombok.jar
            在windows命令行中輸入以下命令: 

java -jar D:\software\lombok.jar 

其中D:\software\lombok.jar這是windows下lombok.jar所在的位置, 數(shù)秒后將彈出以下對話框,以指定eclipse的安裝路徑。  

3)確認(rèn)完eclipse的安裝路徑后,點(diǎn)擊install/update按鈕,即可完成安裝。

4)安裝完成之后,請確認(rèn)eclipse安裝路徑下是否多了一個(gè)lombok.jar包,并且其配置文件eclipse.ini中是否 添加了如下內(nèi)容: 

 -javaagent:lombok.jar 
  -Xbootclasspath/a:lombok.jar 

那么恭喜你已經(jīng)安裝成功,否則將缺少的部分添加到相應(yīng)的位置即可 。

5)重啟eclipse。  

三、項(xiàng)目中使用lombok

在項(xiàng)目中使用lombok的方法很簡單,分為四個(gè)步驟:
           1)在需要自動生成getter和setter方法的類上,加上@Data注解。
           2)在編譯類路徑中加入lombok.jar包,若是maven工程,引入相關(guān)依賴即可。 

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

           3)使用支持lombok的編譯工具編譯源代碼(關(guān)于支持lombok的編譯工具,見“五、支持lombok的編譯工具”)。
           4)編譯得到的字節(jié)碼文件中自動生成了getter和setter方法。 

四、原理分析

接下來對lombok的工作原理進(jìn)行分析,以O(shè)racle的javac編譯工具為例。

自從Java 6起,javac就支持“JSR 269 Pluggable Annotation Processing API”規(guī)范,只要程序?qū)崿F(xiàn)了該API,就能在javac運(yùn)行的時(shí)候得到調(diào)用。

舉例來說,現(xiàn)在有一個(gè)實(shí)現(xiàn)了"JSR 269 API"的程序A,那么使用javac編譯源碼的時(shí)候具體流程如下:
           1)javac對源代碼進(jìn)行分析,生成一棵抽象語法樹(AST)。
           2)運(yùn)行過程中調(diào)用實(shí)現(xiàn)了"JSR 269 API"的A程序。
           3)此時(shí)A程序就可以完成它自己的邏輯,包括修改第一步驟得到的抽象語法樹(AST)。
           4)javac使用修改后的抽象語法樹(AST)生成字節(jié)碼文件。 

詳細(xì)的流程圖如下: 

五、支持lombok的編譯工具

1)由“四、原理分析”可知,Oracle javac直接支持lombok。
           2)常用的項(xiàng)目管理工具M(jìn)aven所使用的java編譯工具來源于配置的第三方工具,如果我們配置這個(gè)第三方工具為Oracle javac的話,那么Maven也就直接支持lombok了。
           3)Intellij Idea配置的編譯工具為Oracle javac的話,也就直接支持lombok了。
           4)Eclipse中使用的不是Oracle javac這個(gè)編譯工具,而是自己實(shí)現(xiàn)的Eclipse Compiler for Java (ECJ).要想使ECJ支持lombok,得進(jìn)行設(shè)置,具體是在Eclipse程序目錄中的eclipse.ini文件中添加如下兩行設(shè)置: 

-javaagent:[lombok.jar所在路徑]
-Xbootclasspath/a:[lombok.jar所在路徑]

六、常用lombok注解

lombok 提供的注解不多,可以參考官方視頻的講解和官方文檔。
           Lombok 注解在線幫助文檔:http://projectlombok.org/features/index
           下面是幾個(gè)比較常用的 lombok 注解:
        @Data   :注解在類上;提供類所有屬性的 getting 和 setting 方法,此外還提供了equals、canEqual、hashCode、toString 方法
        @Setter:注解在屬性上;為屬性提供 setting 方法
        @Getter:注解在屬性上;為屬性提供 getting 方法
        @Log4j :注解在類上;為類提供一個(gè) 屬性名為log 的 log4j 日志對象
        @NoArgsConstructor:注解在類上;為類提供一個(gè)無參的構(gòu)造方法
        @AllArgsConstructor:注解在類上;為類提供一個(gè)全參的構(gòu)造方法  

七、其他問題

現(xiàn)在使用Intellij Idea作為Java項(xiàng)目的IDE,配置Oracle javac作為編譯工具。

現(xiàn)在有一個(gè)A類,其中有一些字段,沒有創(chuàng)建它們的setter和getter方法,使用了lombok的@Data注解,另外有一個(gè)B類,它調(diào)用了A類實(shí)例的相應(yīng)字段的setter和getter方法。

編譯A類和B類所在的項(xiàng)目,并不會報(bào)錯(cuò),因?yàn)樽罱K生成的A類字節(jié)碼文件中存在相應(yīng)字段的setter和getter方法。但是,IDE發(fā)現(xiàn)B類源代碼中所使用的A類實(shí)例的setter和getter方法在A類源代碼中找不到定義,IDE會認(rèn)為這是錯(cuò)誤。

要解決以上這個(gè)不是真正錯(cuò)誤的錯(cuò)誤,可以下載安裝Intellij Idea中的"Lombok plugin"。  

八、lombok的罪惡

使用lombok雖然能夠省去手動創(chuàng)建setter和getter方法的麻煩,但是卻大大降低了源代碼文件的可讀性和完整性,降低了閱讀源代碼的舒適度。  

參考文獻(xiàn):

           [1] http://stackoverflow.com/questions/6107197/how-does-lombok-work
           [2] https://projectlombok.org/download.html
           [3] http://stackoverflow.com/questions/3061654/what-is-the-difference-between-javac-and-the-eclipse-compiler
           [4] http://www.ibm.com/developerworks/library/j-lombok/
           [5] http://notatube.blogspot.com/2010/12/project-lombok-creating-custom.html 

到此這篇關(guān)于Java使用lombok消除冗余代碼的方法步驟的文章就介紹到這了,更多相關(guān)Java lombok消除冗余代碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring/SpringBoot?@RequestParam注解無法讀取application/json格式數(shù)據(jù)問題解決

    Spring/SpringBoot?@RequestParam注解無法讀取application/json格式數(shù)據(jù)問題

    RequestParam用于將指定的請求參數(shù)賦值給方法中的形參,可以接受簡單類型屬性,也可以接受對象類型,一般用于GET請求,下面這篇文章主要給大家介紹了關(guān)于Spring/SpringBoot?@RequestParam注解無法讀取application/json格式數(shù)據(jù)問題解決的相關(guān)資料,需要的朋友可以參考下
    2022-10-10
  • 微服務(wù)Spring Boot 整合 Redis 實(shí)現(xiàn)UV 數(shù)據(jù)統(tǒng)計(jì)的詳細(xì)過程

    微服務(wù)Spring Boot 整合 Redis 實(shí)現(xiàn)UV 數(shù)據(jù)統(tǒng)計(jì)的詳

    這篇文章主要介紹了微服務(wù)Spring Boot 整合 Redis 實(shí)現(xiàn) UV 數(shù)據(jù)統(tǒng)計(jì),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-01-01
  • MyBatis實(shí)現(xiàn)批量插入數(shù)據(jù),多重forEach循環(huán)

    MyBatis實(shí)現(xiàn)批量插入數(shù)據(jù),多重forEach循環(huán)

    這篇文章主要介紹了MyBatis實(shí)現(xiàn)批量插入數(shù)據(jù),多重forEach循環(huán)方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • 詳解mybatis中的if-else的嵌套使用

    詳解mybatis中的if-else的嵌套使用

    本文主要介紹了mybatis中的if-else的嵌套使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • Java實(shí)現(xiàn)WebSocket客戶端詳細(xì)步驟

    Java實(shí)現(xiàn)WebSocket客戶端詳細(xì)步驟

    這篇文章主要介紹了如何使用Java實(shí)現(xiàn)一個(gè)功能全面的WebSocket客戶端,包括引入依賴、創(chuàng)建客戶端類、實(shí)現(xiàn)連接、發(fā)送和接收消息、處理復(fù)雜消息、實(shí)現(xiàn)心跳機(jī)制、重連策略、異常處理、線程安全的隊(duì)列以及測試和調(diào)試,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-03-03
  • SpringBoot應(yīng)用整合ELK實(shí)現(xiàn)日志收集的示例代碼

    SpringBoot應(yīng)用整合ELK實(shí)現(xiàn)日志收集的示例代碼

    這篇文章主要介紹了SpringBoot應(yīng)用整合ELK實(shí)現(xiàn)日志收集的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Mybatis Integer類型參數(shù)值為0時(shí)得到為空的解決方法

    Mybatis Integer類型參數(shù)值為0時(shí)得到為空的解決方法

    這篇文章主要介紹了Mybatis Integer類型參數(shù)值為0時(shí)得到為空的解決方法,有需要的朋友們可以學(xué)習(xí)下。
    2019-08-08
  • Mybatis-Plus中的selectByMap使用實(shí)例

    Mybatis-Plus中的selectByMap使用實(shí)例

    Mybatis-Plus來對數(shù)據(jù)庫進(jìn)行增刪改查時(shí),將里面的函數(shù)試了個(gè)遍,接下來我就將使用selectByMap函數(shù)的簡單測試實(shí)例寫出來,方便沒有使用過的朋友們快速上手,感興趣的可以了解一下
    2021-11-11
  • Java線程安全的計(jì)數(shù)器簡單實(shí)現(xiàn)代碼示例

    Java線程安全的計(jì)數(shù)器簡單實(shí)現(xiàn)代碼示例

    這篇文章主要介紹了Java線程安全的計(jì)數(shù)器簡單實(shí)現(xiàn)代碼示例,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-10-10
  • Java 模擬cookie登陸簡單操作示例

    Java 模擬cookie登陸簡單操作示例

    這篇文章主要介紹了Java 模擬cookie登陸簡單操作,結(jié)合實(shí)例形式分析了Java 模擬cookie登陸的相關(guān)原理與基本實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2020-03-03

最新評論

玉溪市| 乌兰察布市| 合肥市| 南华县| 绥宁县| 桂阳县| 克东县| 满城县| 女性| 涞源县| 曲周县| 托克托县| 通河县| 鸡东县| 紫云| 大竹县| 新田县| 开鲁县| 邮箱| 绥江县| 华蓥市| 洛宁县| 奎屯市| 滦平县| 南澳县| 平顺县| 岳池县| 蛟河市| 三原县| 岫岩| 怀安县| 同德县| 长白| 鹤峰县| 宿迁市| 虹口区| 孟连| 淮安市| 巴中市| 永年县| 孙吴县|