有人能解释一下为什么我们会使用? extends ...吗?在我看来,每当我想在代码中指定这样的条件时,我似乎总是可以使用超级类型。例如,? extends Number总是可以被Number取代,对吗?
考虑以下几点
public static double numberAdd(List<Number> list) {
double sum = 0;
for (Number x : list) {
sum += x.doubleValue();
}
return sum;
}与
public static double genericAdd(List<? extends Number> list) {
double sum = 0;
for (Number x : list) {
sum += x.doubleValue();
}
return sum;
}两者都做同样的事情。你为什么要使用List<? extends Number>版本呢?
发布于 2018-07-17 07:41:31
numberAdd(List<Number> list)只接受List<Number>。
genericAdd(List<? extends Number> list)将接受List<Number>、List<Integer>或List<Double>等.
https://stackoverflow.com/questions/51375802
复制相似问题