public static void main(String args[]) {
List<Double> doubleList = new ArrayList<>();
doubleList.add(new Double(101.215D));
doubleList.add(new Double(102.215D));
doubleList.add(new Double(103.215D));
printIntValue1(doubleList);
System.out.println("*******");
printIntValue2(doubleList);
}
//bounded parameter
public static <T extends Number> void printIntValue1(List<T> list){
for(T num : list){
System.out.println(num.intValue());
}
}
//Wildcard parametr
public static void printIntValue2(List<? extends Number> list){
for(Number num : list){
System.out.println(num.intValue());
}
}
如上述两种方法,两者都给出相同的结果。 任何人都可以告诉我,如果已经完成了有界类型的所有工作,那么为什么存在通配符的概念?通配符是否会执行其他有限类型的其他工作?
答案 0 :(得分:1)
我认为从你的例子来看,使用通配符几乎没有什么好处。 但我相信,引入通配符是为了支持使用相关类型参数的泛型类型的赋值(或相关结构)。
考虑:
List<Number> numberList = new ArrayList<Double>(); //Won't compile
对比:
List<? extends Number> anyNumberList = null;
anyNumberList = new ArrayList<Double>();
anyNumberList = new ArrayList<Integer>();
第二个片段是有效代码。
我同意,从方法参数类型的角度来看,通配符类型并没有显示出特别的优势。