[英]Upper Bounded wildcards in Java
我有兩個通用的方法來計算List的元素總和。 方法的簽名是
double method1(List<? extends Number> list)
- 這里我使用的是通配符。
<U extends Number> double sumOfList1(List<U> list)
- 這里有一個type參數的名稱。
這兩者之間有什么區別,或者它們在功能方面是否相同? 使用類型參數名稱而不是通配符有什么優勢?
public static double sumOfList(List<? extends Number> list) {
double s = 0.0;
for (Number n : list)
s += n.doubleValue();
return s;
}
public static <U extends Number> double sumOfList1(List<U> list) {
double s = 0.0;
for (Number n : list)
s += n.doubleValue();
return s;
}
謝謝。
絕對沒有區別,聲明U
的目的是讓你可以使用它:
public static <U extends Number> void doSomething(List<U> list, Consumer<U> sink) {
list.forEach(sink::accept)
}
這意味着你不關心U
是什么 ,但它必須從Number
擴展。 您關心的是List
包含的類型與Consumer
可以接受的類型兼容。
或者,您可以在方法內使用U
來聲明泛型類型的新實例:
public static <U extends Number> List<U> copy(List<U> list) {
List<U> copy = new ArrayList<>();
copy.addAll(list)
return copy;
}
是的,我知道,有更簡潔的方法可以做到這一點 - 請將其視為一個說明性的例子
由於您沒有在此方法中使用U
,因此它們沒有區別。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.