Java泛型转换的事实
- 虚拟机中没有泛型,只要普通的类和方法
- 所有类型参数都用他们的限定类型替换。无限定类型的用Object替换
- 桥方法被合成用来保持多态
- 为保持类型安全性,必须要时插入强制类型转换
桥方法:将参数强制类型转换后调用另一个重名方法
public void setSecond(Object sec){
setSecond((Data)sec);
}
泛型的约束和局限性
- 不能用基本类型实例化类型参数
- 运行时类型查询只适用于原始类型(Pair<T>的原始类型为Pair),无论何时使用instanceof或涉及泛型类型的强制类型转换都会看到一个编译器警告
- 不能创建参数化类型的数组
- 不能使用new T()、T.class、不能实例化类型变量(可以通过反射)
- 不能在静态上下文中使用类型变量
- 不能抛出、捕获泛型类实例
- 永远可以将参数化类型转换为一个原始类型,即Pair<T> 是Pair的一个子类型