一、限制可用的泛型类型 T
class 类名称<T extends anyClass>
默认情况下: class 类名称<T> 相当于 class 类名称<T extends Object>
使用泛型限制后,泛型类的类型必须实现或继承anyClass这个接口或类,
注意:无论anyClass是接口还是类,都必须使用extends关键字
二、使用类型通配符 ?
主要针对已创建的泛型类的对象,限制它的类型(实现或继承某个接口或类),同样采用extends关键字,例如(其中 A 是一个泛型类):
A<? extends List> a = null ;
a = new A<ArrayList>();
a = new A<LinkedList>();
此外,还可以将该泛型实例设置为方法的形参:
public void doSomething(A<? extends List> a) { ... }
默认情况下:A<?> a 实例对象相当于A<? extends Object> a 实例对象
需要注意:使用通配符 ? 声明的实例对象不能对其添加和修改新的信息,只能查询(读取)和删除
三、泛型类可以有多种泛型,用逗号分隔,例如:MultiOverClass<T1,T2>
四、泛型类中使用泛型可以是数组,但不能用new申请泛型数组,例如:private T[] arr = new T[10] ; 报错
五、泛型除了可以用extends向下限制,还可以用super向上限制,例如:A<? super List> a = new A<Object>(); // 这里对象a 只接受List及其上层父类类型
六、泛型类可以被继承,泛型接口可以被实现,但要注意:子类中的泛型如果要保留父类中的泛型就必须指明,否则子类中的所有泛型会自动变为Object(一般都会保留)