假设我有一个基类:
Class A {
public String field1;
public A(String field1){
this.field1 = field1;
}
}
和一个衍生类:
Class B extends A {
public String field2;
}
假设我有一个List<A> listA
,我如何创建一个构造函数,这样我就可以很容易地将这个列表转换为List<B> listB
?我想在B class
中有一个构造函数,它将接受A object
,并填充B
中A
的所有字段,并有一些逻辑来构造新字段。
Class B extends A {
public String field2;
public B (A a){
this = a;
this.field2 = doLogic(a);
}
}
或者至少只需填写B中A的所有字段:
public B(A a){
this = a;
}
因此,稍后我可以手动将字段从B
设置为如下形式:
listA.stream().map(x -> new B(x)).map(x -> x.setField2(logic(x)));
我知道我可以这样做:
Class B extends A {
public String field2;
public B(A a){
super(a.getField1());
}
}
但这在我看来不太对,获取对象的字段只是为了调用同一个类的构造函数。
如果基类有很多字段,你需要在构造函数中调用所有的字段吗?这看起来不太好,所以我想知道是否有更好的方法。
1条答案
按热度按时间lyfkaqu11#
如果基类有很多字段怎么办
当然,第一个问题是你为什么需要它,是否有其他的方法,在这个答案中,我假设你已经回答了这个问题,并得出了你需要它的结论。
假设我有一个
List<A> listA
,我如何创建一个构造函数,以便可以轻松地将此列表转换为List<B> listB
?你可以做一个复制构造函数,也可以做类似这样的事情:
有了这些,你就可以使用简单的迭代或者流来将
List<A>
转换成List<B>
:另一个选择可能是委托,但这将取决于您的类:
这样做会使B的“field1”为空,因此这可能不是最佳选择。如果你有一个A的接口,它看起来会很相似,但会留下更少的“空”字段: