簡體   English   中英

包含擴展類的抽象類列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM