本帖最后由 小发 于 2013-5-31 12:56 编辑
张孝祥老师基础加强中讲了。
使用?通配符可以引用其它各种参数化的类型,?通配符定义的变量主要用于引用,可以调用与参数无关的方法,不能调用与参数化有关的方法。
/*List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
System.out.println(list.size());
System.out.println(list);*/
/*List<? extends Number> list = new ArrayList<Double>();*/ //能编译通过
/*List<? extends Number> list = new ArrayList<Double>();
list.add(1);
list.add(2);*/ 编译失败
/*List<? extends Number> list = new ArrayList<Double>();
System.out.println(list.size());*/ 编译通过,并求出size=0
因此,以上代码也说明了一个问题,就是在? extends E这种通配符引用的数据类型中,如果向其中增加数据操作的话会有问题。
所以向其中增加数据是不允许的。但是我们可以从其中来读取数据。
如下面代码: - import java.util.*;
- class Test
- {
- public static void main(String[] args)
- {
- List <Double> list1=new ArrayList<Double>();
- list1.add(1.234);
- list1.add(2.123);
- list1.add(1.0098);
- List <Integer> list2=new ArrayList<Integer>();
- list2.add(1);
- list2.add(1);
- list2.add(1);
- printcoll(list2);
- }
- public static void printcoll(List<?extends Number> list)
- {
- Iterator<?extends Number> it=list.iterator();
- while(it.hasNext())
- {
- System.out.println(it.next());
- }
- }
- }
复制代码
|