1.使用?通配符可以引用其他各种参数化的类型,?通配符定义的变量主要用作引用,可以调用与参数化无关的方法,不能调用与参数化有关的方法。
2.当传入的类型不确定时,可以使用通配符?
3.可对通配符变量赋任意值:
如:Collection<?> colls---> cols = newHashSet<Date>();
Cols<Object> 中的Object只是说明Cols<Object> 实例对象中的方法接受的参数是Object
Cols<Object> 是一种具体类型,new HashSet<Date>也是一种具体类型,两者没有兼容性问题。
注意:
ollection<?> a可以与任意参数化的类型匹配,但到底匹配的是什么类型,只有以后才知道,所以,
a=new ArrayList<Integer>和a=new ArrayList<String>都可以, 但a.add(new Date())或a.add(“abc”)都不行,
如:Collection<?> coll ---> coll = newHashSet<Date>();
public static void printObj(Collection<?> coll){
//coll.add(1);是错误的,如果传入的是String类型,就不符合了
for(Object obj : coll){
System.out.println(obj);
}
}
示例:- import java.util.*;
- class GenerticDemo
- {
- public static void main(String[] args)
- {
- ArrayList<String> p = new ArrayList<String>();
- p.add("per20");
- p.add("per11");
- p.add("per52");
- print(p);
- ArrayList<Integer> s = new ArrayList<Integer>();
- s.add(new Integer(4));
- s.add(new Integer(7));
- s.add(new Integer(1));
- print(s);
- }
-
- public static void print(ArrayList<?> al) {
- Iterator<?> it = al.listIterator();
- while (it.hasNext()) {
- System.out.println(it.next());
- }
- }
- }
复制代码 |