天天看點

Lombok 的fields問題

Lombok 的fields問題

布爾類型is開頭的 setter 和 getter

  • 基本類型
  • 包裝類型

setter

基本類型:setXxx(boolean)

包裝類型:setIsXxx(Boolean)

Lombok 的fields問題

getter

基本類型:isXxx()

包裝類型:getIsXxx()

Lombok 的fields問題
Lombok 的fields問題

多個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 的fields問題

通過查閱 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.
           

如果已經存在具有相同名稱(不區分大小寫)和相同參數計數的方法,則不會生成任何方法

看過一篇别人講的部落格,很好的解釋了這個問題的背景以及原因和改善意見,我就簡單描述下,不做過度贅述

  1. 主流IDE 和 lombok 的生成規則不一樣
  2. 官方的态度是,由于無論怎麼做都會與另一半的内容不相容,是以不妨堅持目前已經支援的一半,也就是不做修改,并且不考慮增加屬性,或是引入新的注解
  3. 最終問題的修複也很簡單 就是給隻有大小寫不同的fields顯式的編寫setter/getter方法