簡體   English   中英

通用方法寫入列表

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

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