簡體   English   中英

Java泛型集合的疑問

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

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