[英]generic method write to a list
我正在嘗試創建一個通用方法,該方法接受以下格式的數字列表。 我知道我應該能夠將任何類添加到列表“ o”中,該列表至少是一個數字(浮點數,整數,雙精度數),但是我也應該能夠添加任何對象,因為所有類都從對象擴展而來。 換句話說,對象是任何類的超類。 所以我想知道,為什么在o.add(p)行上出現錯誤? ?
public int checkType(List<? super Number> o)
{
Object p = new Object();
//error
o.add(p);
return - 1;
}
我遵循了<? 超級T>和<? 在Java中擴展T>,這是公認的答案。
類型參數List<? super Number> o
List<? super Number> o
指定可以將任何可以容納Number
List
傳遞給它。
可以是List<Object>
,也可以是List<Number>
。
因此,編譯器將只允許您添加Number
(或子類型)對象。
要進行測試,請使用以下參數調用您的方法。
checkType(new ArrayList<Object>()); // Works fine (and it can hold Object type).
checkType(new ArrayList<Number>()); // Works fine (But it can NOT hold Object type).
因此,如您所見, List<? super Number>
List<? super Number>
表示您正在嘗試向列表中添加一個Number
(PECS規則)。
一個考慮因素?
List<Object> myObjectList = Arrays.asList(1, 2, new SuperObject(), 4, 5);
Java是實用程序類Arrays
標准配置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.