黑马程序员技术交流社区

标题: 泛型方法和类型通配符的区别 [打印本页]

作者: 顾玲玉    时间: 2013-5-28 09:39
标题: 泛型方法和类型通配符的区别
本帖最后由 顾玲玉 于 2013-5-28 15:30 编辑

JDK的collection接口中两个方法定义:
public  interface Collection<E>
{
boolean containAll(Collection<?> c);
boolean addAll(collection<? extends E>  c)
}
这两个方法的形参都用了通配符的形式,可不可以用泛型定义的形式来代替这种通配符的形式,如果可以,这两种定义方式有什么区别?
作者: 刘正祥    时间: 2013-5-28 11:22
在addAll方法的描述里,可以接受Collection类型的参数。其中Collection中的类型参数可以为任何继承E的子类型。
  1. List<Number> nums = new ArrayList<Number>();
  2. List<Integer> ints = Arrays.asList(1, 2);
  3. List<Double> dbls = Arrays.asList(2.78, 3.14);
  4. nums.addAll(ints);
  5. nums.addAll(dbls);
复制代码
List<Integer>和List<Double>都是 Collection<? extends Number>类型的子类,可以将Integer和Double两种类型的List传入到方法中

任何类型变量都可以用该类型的子类型来替换。

通配符修饰的泛型不能用来直接创建变量对象,以将应用于包含某些数据类型的列表的方法也应用到包含其子类型的列表中.










欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2