泛型类 泛型方法
1 泛型 意味着 编写的代码可以被很多不同类型的对象所重用
2 一个泛型类(generic class)就是具有一个或多个类型变量的类
public class Pair
3 可以定义一个带有参数类型的简单方法
public
泛型类型 限定
1 有时候 需要对 类型参数 进行限定 ,该类必须实现了某些接口
public
不论是 类 还是 接口, 这里都用extends
可以有多个限定 T extends comparable & Serializable ,
类型擦除
1 Java 实现 泛型 使用的是 类型擦除, 并替换为Object ,如果有限定类型 就 替换为限定类型
当调用泛型的时候,编译器会进行强制的 类型转换
2 在擦除类型过程中,可能会与原有类型的重载方法 冲突,使用桥方法来避免 (详见书8.5.3)
约束
1 不能用类型参数代替基本类型,因为擦除后是 Object
2 泛型类的 getClass 总得到原始 类型,
3 不允许创建参数化类型的数组 new ArrayList
可以定义 ArrayList<?>[] 然后进行类型转换为 ArrayList
4 不能实例化类型变量, 如 new T(), new T[] 等
5 不能在静态域或方法中引用类型变量
通配符
1 ArrayList
为了解决这个问题, 通过? 来实现通配 如 Pair<? extends T> 就可以 保存 Pair
2 通配符 还能实现 超类型限定
Pair<? super manager> 限定所有 manager 的父类
3 还可以使用无限定的通配符,例如,Pair<? >
反射和泛型
1 Class类是泛型的,如String.Class 就是 Class