static void gPrint(List<? extends Number> l) {
for (Number n : l) {
System.out.println(n);
}
}
static <T extends Number> void gPrintA(List<T> l) {
for (Number n : l) {
System.out.println(n);
}
}
public static void main(String[] args) {
List<Integer> list=new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
gPrint(list);
gPrintA(list);
}
在这种情况下没有区别,因为T不会再使用。
声明 a 的原因T是为了可以再次引用它,从而将两个参数类型或返回类型绑定在一起
如果两个参数<? extends Number>可以传Integer和Long两种类型的,而 限定了只能都传Integer
static void gPrint(List<? extends Number> l,List<? extends Number> l1) {
for (Number n : l) {
System.out.println(n);
}
for (Number n : l1) {
System.out.println(n);
}
}
static <T extends Number> void gPrintA(List<T> l,List<T> l1) {
for (Number n : l) {
System.out.println(n);
}
for (Number n : l1) {
System.out.println(n);
}
}