簡體   English   中英

如何在ArrayList中添加元素 <? extends SomeType> 通過一種方法

[英]How to add element in ArrayList<? extends SomeType> via a method

我想添加元素擴展Type到ArrayList。

ArrayList<? extends Type> 

我定義了一個方法如下

public <T extends Type> void addItem(T itemToAdd, Class<?> classType) {
    ArrayList<? extends Type> allItems = getAllItems(classType);
    allItems.add(itemToAdd);
}

T itemToAdd是錯誤的。 因為我不能添加其他類型。 我想,但我不知道提及它及其錯誤!

如何通過方法調用添加項目?

想想你的定義: ArrayList<? extends Type> ArrayList<? extends Type> 它表示每個元素的列表擴展Type 這並不意味着它們中的每一個都是T類型為itemToAdd 要使此代碼編譯,您必須確保這一事實,即在所有相關位置使用T

public <T extends Type> void addItem(T itemToAdd, Class<T> classType) {
    List<T> allItems = getAllItems(classType);
    allItems.add(itemToAdd);
}

這可能意味着您應該將getAllItem()定義更改為

public <T extends Type> List<T> getAllItems(Class<T> classType)

請注意我將您的ArrayList更改為List 雖然它不屬於主題但是避免在賦值運算符的左側使用具體類,作為方法的返回值和方法參數。

如果為List定義,則所有對象必須具有相同的類型

如果要插入多個類定義的簡單List,則可以插入對象extends Type

示例:

List<Type> list = gellAllItems(class);
list.add(T);

我不確定你聲明getAllItems的返回值,但你不能把itemToAdd與類型T extends Type放入ArrayList<? extends Type> ArrayList<? extends Type> 元素的類型可以是不匹配的(雖然兩者都是Type的派生類,但是不同的Type ),因此ArrayList應聲明為

ArrayList<? super Type> allItems;

這可以保證itmeToAdd可以放入ArrayList ,或者只是:

ArrayList<Type> allItems;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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