package test;
import java.util.ArrayList;
import java.util.List;
public class Test3 {
public static void main(String[] args) {
List<Number> number = new ArrayList<Number>();
number.add(new Integer(10));
number.add(new Double(10));
List<Integer> inte = new ArrayList<Integer>();
List<Number> numInt = new ArrayList<Integer>(); // compile error
sum(number);
sum(inte); // compile error
}
public static void sum(List<Number> n){
}
}
我理解List<Number>
与Java Docs中的List<Integer>
不等。 Object
是两者的父类。
如果您想传递数字的子类型,请执行public static void sum(List<? extends Number> n)
或public static <T extends Number> void(List<T> n)
我的问题:
List<Number>
可以包含Number
Integer
Double
的混合。然而,只有Number
中存在的方法才能在sum
方法中访问。即使我List<? extends Number>
代替List<Number>
,这也只允许我访问Number
的方法。
那么,考虑List<Number>
不等于List<Integer>
,提供了什么用处/目的? (也就是说,这种限制有用吗?)为什么我们需要单独的语法List<? extends Number>
?