使用lombok的builder模式时删除样板代码

ryhaxcpt  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(370)

我在我的springboot项目中使用lombok的builder模式。

@Getters
@SuperBuilder(toBuilder = true)
@NoArgsConstructor
class Parent{
    private String _id;
    private String name;
}

@Getters
@SuperBuilder(toBuilder = true)
@NoArgsConstructor
class child_1 extends Parent{
    private String address;
}   

@Getters
@SuperBuilder(toBuilder = true)
@NoArgsConstructor
class child_2 extends Parent{
    private String gender;
}

当我得到 Parent ```
if(parent instanceof Child_1){
Child_1 c1=(Child_1) parent;

Parent p=Child_1.builder()._id(c1.get_id()).name(c1.getName()).address(c1.getAddress()).build();

}

else if(parent instanceof Child_2){
Child_2 c2=(Child_2) parent;

Parent p=Child_2.builder()._id(c2.get_id()).name(c2.getName()).gender(c1.getGender()).build();

}

这是完美的工作。但是有一些样板代码 `_id(c1.get_id()).name(c1.getName())` . 我只在这里看过 `_id` 以及 `name` 举个例子。但我在父类中有20多个字段,子类中有10多个字段。所以父变量一次又一次地重复。有什么办法可以删掉这些样板代码吗?
我尝试了一些类似的东西,当我得到 `Parent` 对象。在这里 `p` 是父对象

Parent parent=Parent.builder()._id(p.get_id()).name(p.getName()).build();

if(p instanceof Child_1){
Child_1 c1=(Child_1) parent;

parent=Child_1.builder().address(c1.getAddress()).build();

}

else if(p instanceof Child_2){
Child_2 c2=(Child_2) parent;

parent=Child_2.builder().gender(c1.getGender()).build();

}

但是这个 `null` 因为我再次赋值给 `parent` 子类中的对象。任何方法都将不胜感激。提前谢谢
xwmevbvl

xwmevbvl1#

你可以用 BeanUtils.copyProperties(<Source>, <Target>); ```
Parent fromChild=null;

if(p instanceof Child_1){
Child_1 c1=(Child_1) parent;

fromChild=Child_1.builder().address(c1.getAddress()).build();

}

Parent parent=Parent.builder()._id(p.get_id()).name(p.getName()).build();

BeanUtils.copyProperties(parent, fromChild);
``` fromChild 具有空值 _id 以及 name . 所以当我们创造 parent ,我们可以轻松地覆盖空值

相关问题