Lombok 的fields問題
布爾類型is開頭的 setter 和 getter
- 基本類型
- 包裝類型
setter
基本類型:setXxx(boolean)
包裝類型:setIsXxx(Boolean)
getter
基本類型:isXxx()
包裝類型:getIsXxx()
多個Field隻生成一組getter/setter
背景:之前業務字段xxxLog 使用jackson序列化為xxx_log,可能由于當時沒定義準确,需要保證之前場景ok 并新場景下發xxxlog 序列化為 xxxlog是以增加對應一個字段如下來适配此場景(相容bug)
@Data
@Builder
public class LookDemo {
private String xxxLog;
private String xxxlog;
public static void main(String[] args) {
LookDemo lookDemo = LookDemo.builder()
.xxxLog("qwe")
.xxxlog("asd").build();
System.out.println(lookDemo.getXxxLog());
System.out.println(lookDemo.getXxxlog());
System.out.println(lookDemo);
}
}
通過使用javap 檢視編譯後的.class檔案發現上述情況隻生成了一組setter/getter方法
通過查閱 lombok documentation,可以确定确實是 field name 的原因
https://projectlombok.org/features/GetterSetter
No method is generated if any method already exists with the same name (case insensitive) and same parameter count.
如果已經存在具有相同名稱(不區分大小寫)和相同參數計數的方法,則不會生成任何方法
看過一篇别人講的部落格,很好的解釋了這個問題的背景以及原因和改善意見,我就簡單描述下,不做過度贅述
- 主流IDE 和 lombok 的生成規則不一樣
- 官方的态度是,由于無論怎麼做都會與另一半的内容不相容,是以不妨堅持目前已經支援的一半,也就是不做修改,并且不考慮增加屬性,或是引入新的注解
- 最終問題的修複也很簡單 就是給隻有大小寫不同的fields顯式的編寫setter/getter方法