错误方法
public static void printCollection(Collection<Object> cols){
for(Object obj:cols){
System.out.println(obj);
}
cols.add("String");//没错
cols=new HashSet<Date>();//会报告错误
}
正确方法:
public static void printCollection(Collection<?>cols){
for(Object obj:cols){
System.out.printlln(obj);
}
cols.add("String");//错误 因为它不知道未来匹配的就一定是字符串
cols.size();//没错 此方法与类型参数没有关系
cols=new HashSet<Date>();//正确
}
总结:使用通配符可以引用其他各种参数化的类型,?通配符定义的变量主要用于引用,可以调用与参数化无关的方法,不能调用与参数化有关的方法。
因为并不知道未来匹配的就一定是某个类型的参数 |