lombok生成getter setter的小陷阱

2021-08-26 22:20:59 字數 1630 閱讀 8279

最近做專案使用lombok生成getter和setter,**如下:

[color=red]以下**為示例**:[/color]

import lombok.setter;

import lombok.getter;

@getter

@setter

public class member

}

使用jackson,測試**如下:

結果將json資料轉換成這個物件時出現問題,錯誤資訊如下:

[color=red]exception in thread "main" org.codehaus.jackson.map.exc.unrecognizedpropertyexception: unrecognized field "isleader" (class member), not marked as ignorable[/color]

提示說isleader這個property沒有找到,但是明明是存在的。這時想到轉換物件時,是通過setter將值set給每乙個property的,會不會是因為setter不對導致找到property呢?檢視一下生成setter,果然發現問題,如下圖:

[img]

property的名稱是isleader,根據規則,生成的setter應該是setisleader(),但是實際卻是setleader(),問題應該就出在這裡了,那麼修改下member的**,來驗證下我們的猜測,如下:

import lombok.setter;

import lombok.getter;

@getter

@setter

public class member

@override

public string tostring()

}

重新執行測試,問題不再出現,和猜測一樣,是由於生成setter不規範導致的。

既然setter生成的不規範,那麼getter是不是也是呢?如下圖:

[img]

果然getter也是一樣,並不是getisleader(),而是isleader()。

最後,我們看看eclipse自動生成的getter和setter是什麼樣呢?

public class member

public void setleader(boolean isleader)

@override

public string tostring()

}

可見eclipse生成的getter、setter和lombok是一樣的,但是eclipse生成的**是顯示的,可以看見,而lombok生成就不容易發現了。

最後說一下boolean型生成getter和setter的問題,如果boolean型property的名稱是hello,b生成getter和setter的格式是ishello()和gethello(),如果名稱是ishello,生成的還是ishello()和gethello(),這個是sun的規範,但是目前很多框架在使用getter和setter時並不是這樣的,而是sethello ()或者setishello(),所以編碼時一定要小心。

lombok構造方法 lombok作用

使你的 變德更優雅,使用註解的形式代替冗長的 底層使用位元組碼技術 org.projectlombok lombok 1.18.6provided data 註解在類上 提供類所有屬性的 getting 和 setting 方法,此外還提供了equals canequal hashcode tost...

lombok標籤 Lombok介紹和使用

引入使用 官網有簡單的安裝和使用教程。org.projectlombok lombok 1.16.18 provided ieda安裝介紹 lombok介紹和優點 介紹 通過簡單註解來實現精簡 來達到消除冗長 的目的。優點 提高編碼效率 使 更簡潔 消除冗長 避免修改欄位名時忘記修改方法名 提高逼格...

說說 Vuex 的 getters 屬性

假設我們在 vuex 中定義了乙個陣列 const store new vuex.store 業務場景希望過濾出大於 5 的數。馬上想到的方法可能的是 在元件的計算屬性中進行過濾 效果 功能雖然實現了,但如果其它元件也需要過濾後的資料,那麼就得把 index.vue 中的計算過濾 複製出來。如果過濾...