所以我正在阅读泛型以重新熟悉这些概念,尤其是在涉及通配符的地方,因为我几乎从未使用过它们或遇到过它们。从我所做的阅读中,我无法理解他们为什么使用通配符。我经常遇到的一个例子如下。
void printCollection( Collection<?> c ) {
for (Object o : c){
System.out.println(o);
}
}
你为什么不把它写成:
<T> void printCollection( Collection<T> c ) {
for(T o : c) {
System.out.println(o);
}
}
oracle网站的另一个例子:
public static double sumOfList(List<? extends Number> list) {
double s = 0.0;
for (Number n : list)
s += n.doubleValue();
return s;
}
为什么这不写成
public static <T extends Number> double sumOfList(List<T> list) {
double s = 0.0;
for (Number n : list)
s += n.doubleValue();
return s;
}
我错过了什么吗?