2011-03-29 81 views
1

基本上我需要有一個抽象類,它包含一個列表字段,它可以包含某個類的子類,然後創建一個具體類來存儲該類的特定子類。Java泛型集合和繼承

更好的代碼解釋,我相信:

public class A { 
} 

public class B extends A { 
} 

public abstract class AbsClass { 
    protected List<? extends A> list; 
} 

public class ConClass extends AbsClass { 
    list = new ArrayList<B>(); 
} 

與上面的代碼我得到的編譯器錯誤

The method add(capture#3-of ? extends A) in the type List < capture#3-of ? extends A> is not applicable for the arguments (B)

在列表中實例化的線。

我該如何得到這個工作?

+0

關於你的編譯錯誤:你離開了細節。這個錯誤與嘗試調用list.add方法有關,與您的任務不同。您的代碼不會因其他原因而編譯;即分配發生在構造函數或初始化塊之外。 – 2011-03-29 20:18:28

+0

適合我......因爲它應該...... – 2011-03-29 20:25:50

+0

@mlaw不,它不。宣佈無處可用!我們只能猜測它在哪裏宣佈。 – corsiKa 2011-03-29 20:28:19

回答

7

您能直接輸入AbsClass嗎?

public abstract class AbsClass<T extends A> { 
    protected List<T> list; 
} 

public class ConClass extends AbsClass<B> { 
    list = new ArrayList<B>(); 
} 

當然在這一點上是沒有必要甚至實例移動到子類:

public abstract class AbsClass<T extends A> { 
    protected List<T> list = new ArrayList<T>(); 
} 

public class ConClass extends AbsClass<B> { 
    //... other stuff ... 
}