我有3種簡單的類如下:泛型類型的Java - 先進的多態性
public class ElementA {}
public class ElementB extends ElementA {}
public class ElementC extends ElementB {}
然後,如果我想創建,例如,泛型列表這隻需ElementA類的子類,我可以聲明爲:
list.add(new ElementA());
list.add(new ElementB());
list.add(new ElementC());
這是很好的,可以沒有錯誤編譯:
List<? super ElementA> list = new ArrayList<>();
,然後按如下方式使用它。但是,如果我想存儲任何東西,但不是ElementC或ElementB或ElementA,我就會感到困惑。我宣佈這樣的列表如下:
List<? extends ElementC> list = new ArrayList<>();
我完全不能使用它,因爲它只能存儲空值。同樣的事情發生時,我宣佈名單的(請注意,我使用的類,這是「在家庭中」):
List<? extends ElementB>
爲什麼會這樣?
你爲什麼期望'List <?擴展ElementC> list = new ArrayList <>();'存儲任何東西,你沒有任何擴展ElementC的類? – Chris
請閱讀我的問題的結尾。我甚至用Object類試過,仍然List只能存儲空值 –
'List <? extends Object> list = new ArrayList <>();'? 您應該使用如下元素初始化您的列表: 'List <?擴展ElementB> list = new ArrayList();' –
Chris