List<? super Apple> list = new ArrayList<Apple>();
List<? super Apple> list2 = new ArrayList<Fruit>();
superType(list2, new Apple());
}
super关键字声明了类型的下界,表示参数化的类型是所指定的类型,或者是此类型的父类型,直至Object。List<? super Apple > 可以引用 List<Apple>,也可以引用 List<Fruit>,所以无法保证list中都是Apple,但是可以保证,所有list引用的都是Apple的父类,所有向此列表中添 加Apple是没有问题的,而很显然你向List<Fruit>、List<Apple>中添加Object、Fruit对象, 肯定失败,只能够添加Apple。
?参数
“?”代表任意类型。?可以看做 ? extends Object 的缩写。
[java]
public void wideCardType(List<?> list, Fruit fruit ){
Object o = list.get(0);
System.out.println(list.get(0));
// list.add(fruit); // 不能编译
// list.add(new Object()); // 不能被编译
}
[java]
public void testWideCardType(){
/**
* ? 可以看做 ? extends Object 的简化版
*/
List<?> list = new ArrayList<Fruit>();
List<?> list2 = new ArrayList<Apple>();
List<?> list3 = new ArrayList<Object>();
wideCardType(list,new Fruit());
}
List<? super Object> 可以引用 List<任何类型>,而Object是所有的对象的祖先,此list只能添加Object类型对象。