2013-04-17 85 views
1

我有一個超類類似擴展它包含的自身名單

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

而且我要擴展這個超類中有一些更多的領域,像

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

現在引用的類,我的問題是因爲SuperClass持有對類型爲SuperClass的對象列表的引用,我將如何確保任何SubClass對象擁有對SubCode類型對象列表的引用拉斯...這甚至有可能嗎?我在這裏做錯了什麼嗎?

編輯 我可以這樣做

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時,我將不得不創建一個新列表,然後s et SubClass中的列表

+0

由於子類是** A **父類的構造是有效的。看看實例化SuperClass和SubClass對象的類 – Aubin

回答

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 
} 
+0

子類沒有擴展SuperClass,因此它沒有** name **字段... –

+0

爲什麼不把它移動到AbstractClass呢? – rarry

0

如果你想保持這種層次,我會寫這樣的事:

class SubClass extends SuperClass{ 
    .... 
    public addItemToSublist(SuperClass item){ 
     if(item instanceof SubClass){ 
      subList.add(item); 
     } 
    } 
}