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