[英]List of abstract class containing extended classes
所以我的問題是這個。 我正在使用Java,並且正在嘗試執行以下操作(我正在離線工作,因此我很難給出代碼示例,但如果需要的話,我會這樣做):
Class A - abstract class
Class B - abstract class with list<A> as property
Class C - extends class A
Class D - extends class B
在這個類的構造函數中,我試圖用C類的新對象創建B屬性中的列表。
The error is: Type mismatch: cannot convert from C to A.
我似乎無法使其工作。 有什么想法嗎?
編輯:
abstract public class A {
public int theInt;
}
abstract public class B {
public List<A> theList;
}
abstract public class C extends A {
}
abstract public class D extends B {
public D(){
this.theList = new ArrayList<C>();
}
}
這是代碼,我有一個提到的編譯錯誤。
初始化為
List<A> list= new ArrayList<A>();
這樣,您就可以添加A的任何子類型
如果要分配ArrayList<C>
到注釋中顯示的位置
這樣做
list.AddAll(arrayListC);
ArrayList<C>
不擴展List<A>
。 因此作業
this.theList = new ArrayList<C>();
是無效的。
您可以通過向B
添加類型參數來解決此問題
abstract public class B<T extends A> {
public List<T> theList
}
abstract public class D extends B<C> {
public D(){
this.theList = new ArrayList<C>();
}
}
您甚至可以向D
添加類型參數:
abstract public class D<T extends A> extends B<T> {
public D(){
this.theList = new ArrayList<T>();
}
}
只需使用ArrayList<A>
而不是ArrayList<C>
。
請注意, lst.add(x);
不會針對以下類型組合進行編譯:
type of lst | type of x
============================|================================
List<? extends A> | A
----------------------------|--------------------------------
List<C> | E extends A but not C
----------------------------|--------------------------------
List<? extends A> | E extends A
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.