我在我的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` 子类中的对象。任何方法都将不胜感激。提前谢谢
1条答案
按热度按时间xwmevbvl1#
你可以用
BeanUtils.copyProperties(<Source>, <Target>);
```Parent fromChild=null;
if(p instanceof Child_1){
Child_1 c1=(Child_1) parent;
}
Parent parent=Parent.builder()._id(p.get_id()).name(p.getName()).build();
BeanUtils.copyProperties(parent, fromChild);
```
fromChild
具有空值_id
以及name
. 所以当我们创造parent
,我们可以轻松地覆盖空值