泛型通配符?的用法

来源:互联网 发布:js字符串值拼接 编辑:程序博客网 时间:2024/05/22 14:55

 泛型中提供了?通配符,可以引用其他各种参数化的参数,?通配符定义的变量主要用作引用,可以调用与参数化无关的方法,不能调用与参数化有关的方法
具体可以看如下代码:

 public static void Convert(Collection<?> collection){  collection.add("abc");//编译时报错 通配符?无法调用参数化方法  collection.size();//可以调用因为无参  collection.equals(1);//正确   }}

Collection<?> collection表示任意参数化类型的集合,上面collection.add("abc")错误是因为是泛型的参数是不确定的,而size()方法,equals()方法在不确定参数的情况下还可以正确调用,是因为无论泛型参数是什么类型这两个方法都是可以调用的。

相信在阅读API文档时大家经常会见到<? extends E>,<? super E>,这是什么意思呢?请先看如下代码:

public class Test { public static void main(String[] args) {  // TODO Auto-generated method stub  Set<? super Integer> set1 = new TreeSet<Number>();//限定通配符的下边界,即可引用Integer类的父类对象  Set<? extends Number> set2 = new TreeSet<Integer>();//限定通配符的上边界,即可引用所有Number类的子类对象  Set<String> x = null;  Set<?> y = null;  y=x;//通配符可引用任意类型泛化参数  x=y;//   }
注意:限定通配符总是包括自己。