【发布时间】:2015-08-30 09:12:48
【问题描述】:
在了解 Java 泛型的过程中,我遇到了这个问题:
public static <T extends Number> int sumListElems(List<T> list){
int total = 0;
for(Number n: list)
total += n.intValue();
return total;
}
假设我有以下方法可以添加列表的元素,仅限于包含数字的列表。
但是那个代码和这个有什么区别:
public static int sumListElems(List<? extends Number> list){
int total = 0;
for(Number n: list)
total += n.intValue();
return total;
}
它们都按预期编译和执行。这两者有什么区别?除了语法?我什么时候更喜欢使用通配符而不是前者?
嗯,是的,使用通配符方法,我不能在列表中添加新元素,除了 null,否则它不会编译。但除此之外呢?
【问题讨论】:
-
在这种情况下这些是等价的。
标签: java oop generics bounded-wildcard bounded-types