有人可以解释为什么我们会使用? extends ...
。在我看来,只要我想在代码中指定这样的条件,似乎总是可以使用超级类型。例如,? extends Number
总是可以用Number
代替吗?
考虑以下
public static double numberAdd(List<Number> list) {
double sum = 0;
for (Number x : list) {
sum += x.doubleValue();
}
return sum;
}
vs。
public static double genericAdd(List<? extends Number> list) {
double sum = 0;
for (Number x : list) {
sum += x.doubleValue();
}
return sum;
}
两者都做同样的事情^。有什么理由要使用List<? extends Number>
版本?
答案 0 :(得分:1)
unwords sr
仅接受numberAdd(List<Number> list)
。
List<Number>
将接受genericAdd(List<? extends Number> list)
或List<Number>
或List<Integer>
等...