1

我有一个超级类

class SuperClass {
   private String name;
   private List<SuperClass> subList;
   //getter setters
}

我想扩展这个 SuperClass 以拥有更多的字段,例如

class SubClass extends SuperClass {
    private String email;
   //getter setter
}

现在,我的问题是,由于SuperClass包含对 SuperClass 类型的对象列表的引用,我将如何确保任何SubClass对象都包含对 SubClass 类型的对象列表的引用......甚至可能吗?我在这里做错了什么吗?

编辑 我可以做类似的事情吗

class SuperClass {
private String name;
private List<? extends SuperClass> subList;
public SuperClass(List<? extends SuperClass> subList) {
    this.subList = subList;
  }
}

而现在 SubClass 只需要调用超类的构造函数

class SubClass extends SuperClass{
    private String email;

    private SubClass(List<? extends SuperClass> subList) {
        super(subList);
      }
    }

但是现在如果我想在列表中添加一些东西,我将无法添加,因为泛型的 PECS(生产者扩展,消费者超级)原则不允许我这样做。所以无论何时,我都必须将对象添加到 subList 我将不得不创建一个新列表,然后在 SubClass 中设置该列表

4

2 回答 2

7

可以引入第三类吗?沿着这些思路:

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
}
于 2013-04-17T19:22:16.140 回答
0

如果你想保持这种层次结构,我会写这样的东西:

class SubClass extends SuperClass{
    ....
    public addItemToSublist(SuperClass item){
        if(item instanceof SubClass){
            subList.add(item);
        }
    }
}
于 2013-04-17T19:38:07.340 回答