之前写过一篇《链式构造对象的正确姿势》https://cloud.tencent.com/developer/article/1870491
使用Builder模式变种,实现kv包含中间状态不断链式方法。
本文介绍另外一种。
今天和朋友讨论一个场景,父类有多个子类每个子类想通过链式set属性,然后继承过来的父类的属性怎么办?
如果父类型也是设置属性后返回this,那么链的类型变成了父类型,
即使后面得set将类型转成了父类型。
如果想保证链式到最后还是子类型则需要改造一下。
@Data
public class Parent {
private String name;
private Integer age;
}
@Data
public class ChildA extends Parent{
private String nickName;
public ChildA setNickName(String nickName) {
this.nickName = nickName;
return this;
}
public ParentWrapper getWrapper(){
return new ParentWrapper<>(this);
}
}
public class ChildB extends Parent {
private String someName;
public ChildB setSomeName(String someName) {
this.someName = someName;
return this;
}
public ParentWrapper getWrapper(){
return new ParentWrapper<>(this);
}
}
工具类
public class ParentWrapper {
private Parent parent;
public ParentWrapper(Parent parent) {
this.parent = parent;
}
public ParentWrapper setName(String name) {
parent.setName(name);
return this;
}
public ParentWrapper setAge(Integer age) {
parent.setAge(age);
return this;
}
public T build() {
return (T) parent;
}
}
测试类
整体来看其实和Builder模式非常相似,只是加入了强转,实现了父类继承属性的链式调用。
如果觉得本文对你有帮助,欢迎点赞评论,欢迎关注我,我将努力创作更多更好的文章。