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;
  }
}

そして今、サブクラスはスーパークラスのコンストラクターを呼び出すだけです

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 に答える