[英]Extending a class which contains reference to List of itself
I have a super class something like 我有一个超级班级
class SuperClass {
private String name;
private List<SuperClass> subList;
//getter setters
}
And I want to extend this SuperClass to have few more field, something like 我想将此SuperClass扩展为具有更多字段,例如
class SubClass extends SuperClass {
private String email;
//getter setter
}
Now, my question is since the SuperClass holds a reference to a list of objects of type SuperClass, how will I ensure that any SubClass object holds a reference to a list of object of type SubClass... is it even possible? 现在,我的问题是,由于SuperClass拥有对SuperClass类型的对象列表的引用,我如何确保任何SubClass对象都拥有对SubClass类型的对象列表的引用...甚至有可能吗? Am I doing something terribly wrong here?
我在这里做错什么吗?
EDIT Can I do something like 编辑我可以做点什么
class SuperClass {
private String name;
private List<? extends SuperClass> subList;
public SuperClass(List<? extends SuperClass> subList) {
this.subList = subList;
}
}
And now SubClass just needs to call the constructor of super class 现在SubClass只需调用超类的构造函数
class SubClass extends SuperClass{
private String email;
private SubClass(List<? extends SuperClass> subList) {
super(subList);
}
}
But Now if i want to add something to the list, I would not be able to because PECS (producer-extends, consumer-super) principle of generics doesn't allow me to do that.. So whenever, i'll have to add an object to subList I will have to create a new list and then set the list in SubClass 但是现在,如果我想在列表中添加一些内容,我将无法执行,因为泛型的PECS(生产者扩展,超级消费者)原则不允许我这样做。因此,无论何时,我都必须将一个对象添加到subList我将不得不创建一个新列表,然后在SubClass中设置该列表
Would it be possible to introduce a third class? 可以引入第三类吗? Something along those lines:
遵循这些原则:
class AbstractClass<T> {
protected List<T> subList;
// getter setters
}
class SuperClass extends AbstractClass<SuperClass> {
private String name;
// getter setters
}
class SubClass extends AbstractClass<SubClass> {
private String email;
// getter setter
}
If you want to maintain that hierarchy, I would write something like this: 如果您想维护该层次结构,我将编写如下内容:
class SubClass extends SuperClass{
....
public addItemToSublist(SuperClass item){
if(item instanceof SubClass){
subList.add(item);
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.