1. 程式人生 > >使用lombok時可以自定義get、set方法

使用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等方法的,所以放心自定義好了,都是會執行到的。

 

所以呢,寫完之後還是覺得比較蠢!!!