Java基础 -- 泛型之泛型参数
泛型机制常用的参数有3个:
“?”代表任意类型。如果只指定了<?>,而没有extends,则默认是允许任意类。
extends关键字声明了类型的上界,表示参数化的类型可能是所指定的类型,或者是此类型的子类。
super关键字声明了类型的下界,表示参数化的类型可能是所指定的类型,或者是此类型的父类型,直至Object
前提
Fruit是Apple和Orange的超类。
本章通过java代码逐一分析泛型参数的意义和区别
extends参数:
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类型对象。
extends和super意义记忆的技巧
? extends A: ?继承A,?是A的子类,或者?是A本身
? super B: ?是B的父类,或者?是B本身
参考文献:
http://baike.baidu.com/view/1436058.htm
http://fyting.iteye.com/blog/122732