java技能提升,用Lombok甩掉get和set,讓代碼變得更簡潔

2020-12-11 程序猿的內心獨白

前言

前幾天有個新來的同事(實習生)驚訝的對我說:我們的代碼裡好多錯誤,我的程序本地都啟動不了。

我一臉懵逼的質問他:目前線上的代碼,怎麼會有問題嗎?

他不服氣的說:你來看嘛,就是有問題,Dao實體get()和set()方法都沒有。

此處省略10000字,讓我流一會兒技術人的眼淚。

Lombok

通常我們代碼裡的實體Dao或者自定義Bean都會有get()和set()方法,set是設置的意思,而get是獲取的意思,顧名思義,這兩個方法是對數據進行設置和獲取用的。一般來說set和get方法都是對私有域變量進行操作的,所以大多數都是使用在包含特定屬性的類實體中。

現實中有說許多看到密密麻麻的get()和set()就會頭疼,但現在有了Lombok,它提供了簡單的註解的形式來幫助我們簡化消除一些必須有但顯得很臃腫的 java 代碼。通過使用對應的註解,可以在編譯源碼的時候生成對應的方法,所以不會影響任何運行效率。

但也許有的人由於習慣問題,看不到get()和set()也會缺乏一些安全感。

傳統set和get方法

既然是實體,裡面少不了要定義變量,而實體變量的值的設置和獲取,由set()和get()方法實現。標準set和get方法定義如下:

public class MedalinfoVo {private Long id;private String medalname;private String icon;private Integer isLight;private Integer medallevel;public Long getId() {return id; } public void setId(Long id) { this.id = id; } public String getMedalname() { return medalname; } public void setMedalname(String medalname) { this.medalname = medalname; } public String getIcon() { return icon; } public void setIcon(String icon) { this.icon = icon; } public Integer getIsLight() { return isLight; } public void setIsLight(Integer isLight) { this.isLight = isLight; } public Integer getMedallevel() { return medallevel; } public void setMedallevel(Integer medallevel) { this.medallevel = medallevel; }}

方法setXxx()參數為該變量的值,即我們在給該變量定義值的時候設置的。

方法getXxx()無參,直接返回該變量的在主內存的值。

可以看到滿篇的set和get方法,如果一個實體有20個變量或以上,那麼整個class看起來就會非常長而且臃腫,既沒有技術含量,又影響著代碼的美觀,要增加或修改的時候變得麻煩和易錯。

重要的是set和get方法,也存在線程同步問題。

Lombok的set和get方法

Lombok是一種自動接通你的編輯器和構建工具的一個Java庫。lombok其實就是幫助我們編寫getter或者equals方法的一個「工具」。官方網站:Lombok官網

lombok的使用

首先引入maven依賴:

使用了lombok的實體

@Getter@Setterpublic class MedalinfoVo {private Long id;private String medalname;private String icon;private Integer isLight;private Integer medallevel;}

看到沒有,使用了lombok的實體,變得非常簡潔和美觀,而且執行起來效率變得非常快,這是因為lombok庫直接調用了java源碼類庫而實現,具體可以詳看lombok源碼實現。

lombok實現原理

Lombok的基本流程應該基本是這樣:

定義編譯期的註解利用JSR269 api(Pluggable Annotation Processing API )創建編譯期的註解處理器利用tools.jar的javac api處理AST(抽象語法樹)將功能註冊進jar包

只是通過簡單的@Getter @Setter 註解便可以實現變量的set和get方法,除此外還有@ToString、@NoArgsConstructor (構造函數)等,諸多註解供你使用,為你節省大量寶貴時間和代碼提高開發效率。

相關焦點

  • Java代碼中寫set/get方法了,逮到罰款!
    你的 Java 代碼中還充斥著大量的 set/get 方法?我們在剛開始學習 Java 語言的時候講過,面向對象的三大特徵就是封裝,繼承,和多態。在 Java 中,要保證封裝性,需要將成員變量私有化,對外提供 set/get 方法來訪問,雖然現在的 IDE,像 eclipse,IDEA都提供了快捷鍵,來生成 set/get 方法,但是在做項目的時候,一個 JavaBean 往往會有很多的成員變量,一個變量對應兩個方法,如果有10幾個成員變量,那麼會對應20多個方法,也許還要去寫構造器、equals 等方法,而且需要維護。
  • CTO:不要在代碼中寫 set/get 方法了,逮一次罰款...
    你的 Java 代碼中還充斥著大量的 set/get 方法於是公司出了規定:不要在代碼中寫 set/get 方法了,逮一次罰款。剛開始學習 Java 語言的時候,面向對象的三大特徵就是封裝,繼承,和多態。
  • 答應我,試試IDEA的這款插件,不要在代碼中出現大量的set/get方法了...
    你的 Java 代碼中還充斥著大量的 set/get 方法?我們在剛開始學習 Java 語言的時候講過,面向對象的三大特徵就是封裝,繼承,和多態。在 Java 中,要保證封裝性,需要將成員變量私有化,對外提供 set/get 方法來訪問,雖然現在的 IDE,像 eclipse,IDEA都提供了快捷鍵,來生成 set/get 方法,但是在做項目的時候,一個 JavaBean 往往會有很多的成員變量,一個變量對應兩個方法,如果有10幾個成員變量,那麼會對應20多個方法,也許還要去寫構造器、equals 等方法,而且需要維護。
  • 優雅的寫一個JavaBean,免去生成get和set的終極解決方案
    開發中我們要寫大量的java實體類,雖然idea能夠直接生成get和set方法,有的時候碰到那種屬性很多的實體類,看代碼都看的頭痛。現在介紹一款好用的插件給各位小夥伴,它能夠讓代碼更簡潔好看,不需要生成get和set方法,編譯也能通過。
  • Java 程式設計師利器:lombok神工具
    Lomboz是Eclipse的一個J2EE的插件,它將很多Java應用伺服器、J2EE組件和Web應用開發集成到Eclipse中,可以幫助Java開發者使用Eclipse建立、測試、部署J2EE應用。Lombok能以簡單的註解形式來簡化java代碼,提高開發人員的開發效率。
  • 再也不敢精通Java了——get/set篇
    上面是 get 的情況,那 set 呢?按理來說應該生成 isIsActive2 方法和 setIsActive2 方法才對呀,結果居然沒有!請問:你覺得這個是 lombok 的鍋還是 java 本身的設計 🐷為了排除嫌疑,我用 idea 自動生成 get/set ,結果它倆居然是一樣的,那這個應該就是 java 的某種特點 了
  • 五分鐘學會 Java 開發效率神器 Lombok
    技能)轉自:古古說Lombok 是一個 Java 第三方庫,可以透過簡單的註解省略 Java 的代碼,像是 setter、getter、logger...等,目的在消除冗長的代碼和提高開發效率假設你在類上加上了一個 @Getter 和 @Setter 註解,那你就不用在寫煩人的 getter 和 setter,lombok
  • 十分鐘搞懂Java效率工具Lombok使用與原理
    我個人覺得 Lombok是一個優化Java代碼以及提升開發效率不錯的工具。
  • 極簡代碼神器:Lombok使用教程
    多線程內容聚合Lombok 是一個非常神奇的 java 類庫,會利用註解自動生成 java Bean 中煩人的 Getter、Setter,還能自動生成 logger、ToString、HashCode、Builder 等 java特色的函數或是符合設計模式的函數,能夠讓你 java Bean 更簡潔,更美觀。
  • Java開發神器:Lombok 學習指南
    在開發環境中使用 Lombok 插件後,Java 開發人員可以節省出重複構建,諸如 hashCode 和 equals 這樣的方法以及各種業務對象模型的 accessor 和 toString 等方法的大量時間。對於這些方法,Lombok 能夠在編譯原始碼期間自動幫我們生成這些方法,但並不會像反射那樣降低程序的性能。
  • 迷茫了,我們到底該不該用lombok?
    前言最近上網查資料發現很多人對lombok褒貶不一,引起了我的興趣,因為我們項目中也在大量使用lombok,大家不同的觀點讓我也困惑了幾天,今天結合我實際的項目經驗,說說我的個人建議。隨便搜搜就找到了這幾篇文章:這些人建議使用 lombok,覺得它是一個神器,可以大大提高編碼效率,並且讓代碼更優雅。
  • 99%的程式設計師都在用Lombok,原理竟然這麼簡單?
    @Getter/@Setter:用在屬性上,再也不用自己手寫 setter 和 getter 方法了,還可以指定訪問範圍;@ToString:用在類上可以自動覆寫 toString 方法,當然還可以加其他參數,例如 @ToString(exclude=」id」) 排除 id 屬性,或者 @ToString(callSuper=true, includeFieldNames=
  • 細思極恐,你真的會寫java嗎
    講述方向 由於一直從事移動網際網路相關工作,java開發中經常和移動端打交道或者做一些後端的工作,所以本篇文章更可能涉及和移動端的交互或者與後端的交互方式,筆者希望以自身的一些學習經驗或者開發經驗,可以帶動認真閱讀本篇文章的讀者們,讓大家對java有一個更好的態度去學習它,它不只是一個賺錢的工具而已。
  • 一些不錯 Java 實踐推薦!建議閱讀3遍以上!
    講述方向 由於一直從事移動網際網路相關工作,java開發中經常和移動端打交道或者做一些後端的工作,所以本篇文章更可能涉及和移動端的交互或者與後端的交互方式,筆者希望以自身的一些學習經驗或者開發經驗,可以帶動認真閱讀本篇文章的讀者們,讓大家對java有一個更好的態度去學習它,它不只是一個賺錢的工具而已。
  • 太火了,這些牛逼的Java代碼技巧,肯定能讓你目瞪口呆!
    別告訴我快捷鍵不好用更換 IDE 不在我本文的重點內容中,所以不想用太多的篇幅去寫為什麼更換IDE。在這裡,我只能告訴你,更換 IDE 只為了更好、更快的寫好 Java 代碼。原因略。別告訴我快捷鍵不好用,請嘗試新事物。beanbean 使我們使用最多的模型之一,我將以大篇幅去講解 bean,希望讀者好好體會。
  • 99%的程式設計師都在用Lombok,原理竟然這麼簡單?我也手擼了一個!
    :用在類上自動生成 equals 方法和 hashCode 方法;@NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor:用在類上,自動生成無參構造和使用所有參數的構造函數以及把所有 @NonNull 屬性作為參數的構造函數,如果指定 staticName="of" 參數,同時還會生成一個返回類對象的靜態工廠方法,比使用構造函數方便很多
  • get新技能,Java的Class與反射機制原理,讓你寫出更靈活的代碼
    作為一個優秀的碼農,總是希望用最少的代碼來實現某一項功能,我也會經常翻看自己寫的舊代碼,看看有沒有可以提升的空間。代碼太複雜要考慮的是有沒有「殺雞用牛刀」,架構過度的設計,代碼層級過度設計等等。代碼臃腫一般都是為了一些簡單的功能快速上線,一直往裡面堆功能性或兼容性的代碼,這就是一直在做加法,但優秀的程式設計師應該學會做減法,時不時檢查一下自己的代碼是否存在冗餘和無用的功能性代碼。而關於代碼的靈活性那就更有的說了,今天就來帶大家來聊聊關於這方面的技術點:反射機制。
  • 細思極恐 —— 你真的會寫 Java 嗎?
    講述方向由於一直從事移動網際網路相關工作,java開發中經常和移動端打交道或者做一些後端的工作,所以本篇文章更可能涉及和移動端的交互或者與後端的交互方式,筆者希望以自身的一些學習經驗或者開發經驗,可以帶動認真閱讀本篇文章的讀者們,讓大家對java有一個更好的態度去學習它,它不只是一個賺錢的工具而已。
  • 99%的程式設計師都在用Lombok,原理竟然這麼簡單?我也手擼了一個!|建議收藏!!!
    ,自動生成 try-finally 這樣的代碼來關閉流;@Getter/@Setter:用在屬性上,再也不用自己手寫 setter 和 getter 方法了,還可以指定訪問範圍;@ToString:用在類上可以自動覆寫 toString 方法,當然還可以加其他參數,例如 @ToString(exclude=」id」) 排除 id 屬性,或者 @ToString(callSuper=true, includeFieldNames
  • 簡潔方便的集合處理——Java 8 stream流
    而且java8的很多新特性都是革命性的,比如各種集合的優化、lambda表達式等,所以我們還是要去了解java8的魅力。今天我們來學習java8的Stream,並不需要理論基礎,直接可以上手去用。我接觸stream的原因,是我要搞一個用戶收入消費的數據分析。起初的統計篩選分組都是打算用sql語言直接從mysql裡得到結果來展現的。