使用?通配符可以引用其他各种参数化的类型,?通配符定义的变量主要用作引用,可以调用与参数化无关的方法,不能调用与参数化有关的方法。
- public static void printCollection(Collection<?> cols) {
- for(Object obj:cols) {
- System.out.println(obj);
- }
- //cols.add("string");//错误,因为它不知自己未来匹配就一定是String
- cols.size();//没错,此方法与类型参数没有关系
- cols = new HashSet<Date>();
- }
复制代码
使用泛型T:将类型转换成T就行
- public static <T> void printCollection(Collection<T> cols) {
- for(Object obj:cols) {
- System.out.println(obj);
- }
- cols.add((T) "string")
- cols.size()
- cols = (Collection<T>) new HashSet<Date>();
- }
复制代码 |