项目中遇到的一个问题,先把结论写在这里:
当使用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等方法的,所以放心自定义好了,都是会执行到的。
所以呢,写完之后还是觉得比较蠢!!!