大家好嫉到,我是G探險者沃暗。
項目里,因為我使用了Lombok插件何恶,然后代碼走查的時候被領(lǐng)導點名了孽锥。
我心想,這么好用的插件细层,為啥不推廣呢忱叭,整天寫那些煩人的setter,getter方法就不嫌煩么今艺?
[圖片上傳失敗...(image-842c4b-1717399272559)]
領(lǐng)導既然不讓用韵丑,自然有他的道理。
[圖片上傳失敗...(image-28439f-1717399272559)]
于是我查了一番關(guān)于lombok的一些緋聞虚缎。就有了這篇文章撵彻。
首先呢,Lombok 是一個在 Java 項目中廣泛使用的庫实牡,旨在通過注解自動生成代碼陌僵,如 getter 和 setter 方法,以減少重復代碼并提高開發(fā)效率创坞。然而碗短,Lombok 的使用也帶來了一些挑戰(zhàn)和爭議,特別是關(guān)于代碼的可讀性和與 Java Bean 規(guī)范的兼容性题涨。
Lombok 基本使用
示例代碼
不使用 Lombok:
public class User { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } // 其他 getter 和 setter}
使用 Lombok:
import lombok.Data;@Datapublic class User { private String name; private int age; // 無需顯式編寫 getter 和 setter}
Lombok 的爭議
代碼可讀性和透明度:Lombok 自動生成的代碼在源代碼中不直接可見偎谁,可能對新開發(fā)者造成困擾。
工具和 IDE 支持:需要特定的插件或配置纲堵,可能引起兼容性問題巡雨。
與 Java Bean 規(guī)范的兼容性:Lombok 在處理屬性命名時可能與 Java Bean 規(guī)范產(chǎn)生沖突,特別是在屬性名以大寫字母開頭的情況席函。
下面我就列舉一個例子進行說明铐望。
屬性命名的例子
假設(shè)有這么一個屬性,aName;
標準 Java Bean 規(guī)范下:
屬性
aName
的setter getter 方法應為setaName() getaName()
茂附。但是 Lombok 可能生成
getAName()
正蛙。
這是因為Lombok 在生成getter和setter方法時,將屬性名的首字母也大寫营曼,即使它是小寫的乒验。所以對于aName屬性,Lombok生成的方法可能是getAName()和setAName()溶推。
在處理JSON到Java對象的映射時徊件,JSON解析庫(如Jackson或Gson)會嘗試根據(jù)Java Bean規(guī)范匹配JSON鍵和Java對象的屬性。它通常期望屬性名的首字母在getter和setter方法中是小寫的蒜危。因此虱痕,如果JSON鍵為"aName",解析庫會尋找setaName()方法辐赞。
所以部翘,當你使用Lombok的@Data注解,且Lombok生成的setter方法為setAName()時响委,JSON解析庫可能找不到匹配的方法來設(shè)置aName屬性新思,因為它尋找的是setaName()。
這種差異可能在 JSON 到 Java 對象的映射中引起問題赘风。
Java Bean 命名規(guī)范
根據(jù) Java Bean 規(guī)范夹囚,屬性名應遵循駝峰式命名法:
單個單詞的屬性名應全部小寫。
多個單詞組成的屬性名每個單詞的首字母通常大寫邀窃。
結(jié)論
Lombok 是一個有用的工具荸哟,可以提高編碼效率并減少冗余代碼。但是瞬捕,在使用它時鞍历,團隊需要考慮其對代碼可讀性、維護性和與 Java Bean 規(guī)范的兼容性肪虎。在決定是否使用 Lombok 時劣砍,項目的具體需求和團隊的偏好應該是主要的考慮因素。