[英]Java generics collection doubt
我在使用仿制葯時遇到了麻煩。 我已經定義了以下靜態方法:
public static <E extends Number> List<E> group(E ... numbers) {
return Arrays.asList(numbers);
}
我理解為什么會這樣:
List<Integer> ints = group(1, 2, 3);
但是我需要在方法簽名中更改以使其工作:
List<Number> ints = group(1, 2, 3);
或者我應該只調用group類型指定Number類型:
List<Number> ints = MyClass.<Number>group(1, 2, 3);
提前致謝。
您將無法獲得List<Number>
。
如果您的方法group(1,2,3)
返回List<Integer>
,並且您說它有效,那么此表達式的類型為List<Integer>
。
List<Integer>
不是 List<Number>
。 繼承意味着特化,所以如果你的List<Integer>
是一種List<Number>
你可以將Double
添加到List<Integer>
(因為超類可以做到,子類也可以這樣做)。 這是錯誤的。 這不是一個轉換問題,它只會將編譯問題推遲到運行時。 問題是合乎邏輯的,對人類來說是一個悖論,但這就是收集和繼承的工作方式。
所以,如果你真的想得到List<Number>
我建議你定義第二種方法:
public static List<Number> groupAsNumbers(Number ... numbers) {
return Arrays.asList(numbers);
}
此致,Stéphane
您需要明確指定Number
作為類型參數,如您所建議的那樣。
List<Number> ints = MyClass.<Number>group(1, 2, 3);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.