使用lombok時可以自定義get、set方法
專案中遇到的一個問題,先把結論寫在這裡:
當使用lombok時,部分get、set方法需要自定義,lombok不會再生成對應的方法。所以自己寫get、set方法和lombok生成的方法不衝突。
可能看到這裡,對於問題以及問題的結論都看得雲裡霧裡,那麼我舉個列子:
在Idea裡建立兩個Bean類CupA和CupB,都使用@Data註解,只是CupA的cup屬性的set方法自定義。
CupA.java
import lombok.Data; @Data public class CupA { public String color; public String cup; public void setCup(String cup) { if(cup==null || "".equals(cup)) cup="0"; this.cup = cup; } }
CupB.java
import lombok.Data;
@Data
public class CupB {
public String color;
public String cup;
}
接下來看一下Structure這個框(使用eclipse的同鞋可以看outline這個框)。
不難發現,左邊自定義的setCup圖示和其他方法不一樣,而lombok沒有再生成setCup方法了。所以有自定義的方法時,lombok不再生成對應的方法。所以我們在體驗lombok方便的同時,也可以愉快的自定義bean中的方法了。
--------------------------------------------------------------------------- 分割線 --------------------------------------------------------------------------
我在專案中遇到的問題:
實體類B拷貝給實體類A,實體類B中的屬性如果是空,則拷貝給A的時候給A的屬性賦值為0;(下面用CupB、CupA表示)
最簡單的方法是,給CupB的屬性賦值的時候做判斷,但是一個大的專案裡,CupB的使用次數是相當龐大的,所以想到修改CupA這個一勞永逸的方案。
但是對BeanUtil方法不瞭解,不知道實體類自定義方法後,拷貝屬性會不會報錯,或者不生效啥的(這個想法是真的蠢了),自己在專案裡寫了兩個實體類和一個main方法測試一下。
測試用的main方法:
import org.springframework.beans.BeanUtils;
public class Demo {
public static void main(String[] args) {
CupA cupA = new CupA();
CupB cupB = new CupB();
cupB.setCup("");
BeanUtils.copyProperties(cupB,cupA);
System.out.println("結果:"+cupA.getCup());
}
}
輸出結果是:
所以呢,知道了兩件事情:
1.使用lombok時可以自定義屬於自己的方法
2.bean拷貝時,當然是會使用到get、set等方法的,所以放心自定義好了,都是會執行到的。
所以呢,寫完之後還是覺得比較蠢!!!