日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

騰訊電商二面:Lombok 是銀彈?還是陷阱?

來源: 責編: 時間:2024-06-19 15:36:37 144觀看
導讀在 Java語言中,有大量類似于 getter、setter、toString 這樣的模板代碼,為了解決這個問題,一個流行的框架 Lombok誕生了。前幾天看到騰訊的一道 2面題:Lombok是銀彈?還是陷阱?生產環境建議使用 Lombok嗎?今天我們一起來聊一

在 Java語言中,有大量類似于 getter、setter、toString 這樣的模板代碼,為了解決這個問題,一個流行的框架 Lombok誕生了。前幾天看到騰訊的一道 2面題:Lombok是銀彈?還是陷阱?生產環境建議使用 Lombok嗎?今天我們一起來聊一聊。TXb28資訊網——每日最新資訊28at.com

TXb28資訊網——每日最新資訊28at.com

Lombok是什么?

Lombok是一個三方開源的 Java庫,通過注解可以自動將代碼插入到編輯器和構建工具中,為 Java程序員省略了很多樣板代碼的編寫,除了生成getter、setter方法,還可以生成 equals、hashCode和各種類構造函數等。在很多 Java程序員的眼中簡直就是銀彈。TXb28資訊網——每日最新資訊28at.com

Lombok如何使用?

Lombok的使用很簡單,主要是通過注解來精簡代碼,常用的注解如下:TXb28資訊網——每日最新資訊28at.com

  • @Getter:作用在類上,為實體類所有屬性添加 getter方法;
  • @Setter:作用在類上,為實體類所有屬性添加 setter方法;
  • @ToString:作用在類上,當調用toString()方法,可以輸出實體類中所有屬性的值。
  • @Data:作用在類上,相當于同時使用了@ToString、@EqualsAndHashCode、@Getter、@Setter和@RequiredArgsConstrutor這些注解;
  • @AllArgsConstructor:作用在類上,為實體類生成包含所有屬性參數的構造方法;
  • @NoArgsConstructor:作用在類上,為實體類生成無參構造方法;
  • @RequiredArgsConstructor:作用在類上,配合@NonNull注解使用,生成指定參數的構造方法。比如在age屬性前面加@NonNull注解,則User生成需要age參數的構造方法;

下面給出了一個 Lombok @Data注解的使用示例:TXb28資訊網——每日最新資訊28at.com

import lombok.Data; @Datapublic class User {    private String id;    private String name;}

上述示例通過在類上使用 @Data注解后,我們就不需要再手動添加 getter、setter等模版代碼,整個代碼看起來簡潔了很多。TXb28資訊網——每日最新資訊28at.com

Lombok如何工作?

從 Lombok如何使用的講解中我們可以看到:Lombok主要是依賴注解來標識(標記)需要在該類中生成哪些代碼。除此之外,還有一個重要的技術點是抽象語法樹(AST)。TXb28資訊網——每日最新資訊28at.com

抽象語法樹(AST,Abstract Syntax Tree)是一種用于表示程序源代碼結構的樹狀數據結構。它抽象出代碼的語法結構,忽略某些細節,以便于編譯器或解釋器進行分析和處理。TXb28資訊網——每日最新資訊28at.com

在 Java中,AST是一種在生成字節碼之前創建的中間結構,如下圖為 AST示例:TXb28資訊網——每日最新資訊28at.com

TXb28資訊網——每日最新資訊28at.com

TXb28資訊網——每日最新資訊28at.com

Lombok是注解和 AST的完美組合,Lombok通過識別注解,然后操縱 AST將不存在的樣板代碼插入到類中。TXb28資訊網——每日最新資訊28at.com

但是 Lombok并不是直接修改源代碼文件,而是在編譯過程中動態生成代碼,為了實現這一點,Lombok需要攔截 Java編譯器的調用,而這種攔截是通過插件來實現的,比如 IntelliJ, VSCode, Eclipse 或者在構建工具 Maven, Gradle, Make等。因此,如果選用的 IDE或依賴/構建管理器不支持 Lombok,代碼將無法編譯。TXb28資訊網——每日最新資訊28at.com

考慮因素

Lombok為 Java省略了很多樣板代碼的編寫,但是,對于項目中使用 Lombok,我們還是應該多一些思考,這里主要總結為下面 4個考慮點:TXb28資訊網——每日最新資訊28at.com

1.編譯時間

由于 Lombok在編譯時完成樣板代碼的填充,因此,勢必導致編譯時間的增加,尤其是在大型代碼庫中,這種增加可能會有很大影響,盡管 Lombok隨著版本的升級,性能也在提升,但使用 Lombok的時間仍然比不使用 Lombok的時間長。TXb28資訊網——每日最新資訊28at.com

2.友好性

Lombok大大減少了Java類中的樣板代碼,特別是在領域類(TOs、DTOs、實體)中,這些類通常有很多類級別的屬性。TXb28資訊網——每日最新資訊28at.com

但是,使用 Lombok后,所有參與這個項目開發的技術人員都需要安裝 Lombok插件,因此,對于不愿意使用 Lombok的開發人員來說不太友好。另外,如果團隊中有剛工作的組員,如果一開始就在 Lombok這種環境下,那么對于他們的成長也是不友好的。TXb28資訊網——每日最新資訊28at.com

3.Java標準

在開發過程中,我們通常會使用 IDE或構建工具自動編譯Java代碼,所以 Lombok可以在這個階段自動完成它的工作,但是,假如我們只是使用 javac來編譯源代碼,如果源代碼中使用了 Lombok生成的get方法,這種情況下編譯會出錯提示get方法不存在。TXb28資訊網——每日最新資訊28at.com

4.兼容性

如果項目中涉及 JDK的版本升級,可能出現兼容性問題,因為每個版本可能會改變 AST的生成和解釋方式。因此,如果使用了 Lombok,在升級 Java版本后,可能會導致項目無法編譯。TXb28資訊網——每日最新資訊28at.com

盡管這個問題重新編譯后可以解決,但是,如果使用了 Lombok,還是要注意上述提到的可能編譯失敗的問題。TXb28資訊網——每日最新資訊28at.com

5.開發和CR

Lombok 是在編譯期為類生成樣板代碼,因此,開發人員在調試時看不到這些代碼,可能會給調試帶來一些困難,另外,Lombok 自動生成的代碼是隱式的,可能會讓代碼行為不夠透明,給代碼審查和維護帶來一些挑戰。TXb28資訊網——每日最新資訊28at.com

總結

本文從面試題出發,講解了 Lombok的工作原理以及其優點和需要考慮的因素:TXb28資訊網——每日最新資訊28at.com

1.優點

可以大大減少樣板代碼的手動編寫TXb28資訊網——每日最新資訊28at.com

2.考慮因素

  • 編譯時間
  • 友好性
  • Java標準
  • 兼容性
  • 開發和CR

3.個人建議

對于我個人而言,傾向于在項目不使用 Lombok,主要有以下 3個原因:TXb28資訊網——每日最新資訊28at.com

  • Lombok只是減少樣板代碼,幫助程序員偷了懶,并沒有給項目帶來什么實質性的收益,而且這些樣板代碼 IDE也可以快速生成;
  • 基于上述 5個考慮因素的任何一個,引入 Lombok都不是一個很好的決定;
  • 網上看到了 Lombok很多花哨的使用方式,這樣潛在的風險更大;

最后,項目中是否使用 Lombok,取決于個人喜好以及團隊和項目的選擇(大廠一般都會禁用 Lombok),但是,上述的考慮因素或許可以給你的決策多一個參考。TXb28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-94843-0.html騰訊電商二面:Lombok 是銀彈?還是陷阱?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 一行 Python 實現文件批量重命名的七種方法

下一篇: 從 Linux 服務器上遞歸下載文件夾下所有文件

標簽:
  • 熱門焦點
  • Mate60手機殼曝光 致敬自己的經典設計

    8月3日消息,今天下午博主數碼閑聊站帶來了華為Mate60的第三方手機殼圖,可以讓我們在真機發布之前看看這款華為全新旗艦的大致輪廓。從曝光的圖片看,Mate 60背后攝像頭面積依然
  • 直屏旗艦來了 iQOO 12和K70 Pro同臺競技

    旗艦機基本上使用的都是雙曲面屏幕,這就讓很多喜歡直屏的愛好者在苦等一款直屏旗艦,這次,你們等到了。據博主數碼閑聊站帶來的最新爆料稱,Redmi下代旗艦K70 Pro和iQOO 12兩款手
  • 天貓精靈Sound Pro體驗:智能音箱沒有音質?來聽聽我的

    這幾年除了手機作為智能生活終端最主要的核心之外,第二個可以成為中心點的產品是什么?——是智能音箱。 手機在執行命令的時候有兩種操作方式,手和智能語音助手,而智能音箱只
  • 7月安卓手機性價比榜:努比亞+紅魔兩款新機入榜

    7月登場的新機有努比亞Z50S Pro和紅魔8S Pro,除了三星之外目前唯二的兩款搭載超頻版驍龍8Gen2處理器的產品,而且努比亞和紅魔也一貫有著不錯的性價比,所以在本次的性價比榜單
  • Flowable工作流引擎的科普與實踐

    一.引言當我們在日常工作和業務中需要進行各種審批流程時,可能會面臨一系列技術和業務上的挑戰。手動處理這些審批流程可能會導致開發成本的增加以及業務復雜度的上升。在這
  • 讓我們一起聊聊文件的操作

    文件【1】文件是什么?文件是保存數據的地方,是數據源的一種,比如大家經常使用的word文檔、txt文件、excel文件、jpg文件...都是文件。文件最主要的作用就是保存數據,它既可以保
  • OPPO K11采用全方位護眼屏:三大護眼能力減輕視覺疲勞

    日前OPPO官方宣布,全新的OPPO K11將于7月25日正式發布,將主打旗艦影像,和同檔位競品相比,其最大的賣點就是將配備索尼IMX890主攝,堪稱是2000檔位影像表
  • Windows 11發布,微軟一改往常對老機型開放的態度

    距離 Windows 11 發布已經過去一周,在過去一周里,很多數碼愛好者圍繞其對 Android 應用的支持、對老機型的升級問題展開了激烈討論。與以往不同的是,在這次大
  • 三翼鳥智能家居亮相電博會,讓用戶體驗更真實

    2021電博會在青島國際會展中心開幕中,三翼鳥直接把“家”搬到了現場,成為了展會的一大看點。這也是三翼鳥繼9月9日發布了行業首個一站式定制智慧家平臺后的
Top 主站蜘蛛池模板: 万源市| 资溪县| 涿州市| 扎赉特旗| 西青区| 务川| 莱西市| 阿合奇县| 方正县| 红河县| 海南省| 涞水县| 西华县| 河北区| 焉耆| 晋城| 呼和浩特市| 栾城县| 宣化县| 姜堰市| 永和县| 镇江市| 青龙| 永福县| 蕲春县| 无锡市| 北川| 沧州市| 双桥区| 锦屏县| 广南县| 涿州市| 延寿县| 射洪县| 清原| 连州市| 武鸣县| 休宁县| 姜堰市| 华阴市| 镇远县|