一些个人的理解:
1.虚拟机没有泛型类型对象—-所有的对象都属于普通类。
2.无论何时定义一个泛型类型,都自动提供了一个相应的原始类型(raw type)。原始类型的名字就是删去类型参数后的泛型类型名。
3.原始类型(分析的原始类型)
Pair<T>
的原始类型
//擦除类型变量,并替换为限定类型(原始类型用第一个限定的类型变量来替换,无限定的变量用Object)
public class pair{
private Object first;
private Object second;
public Pair(){
first = null;
second = null;
}
public Pair(Object first, Object second){
this.first = first;
this.second = second;
}
public Object getFirst(){
return first;
}
public Object getSecond(){
return second;
}
public void setFirst(Object newValue){
first = new Value;
}
public void setSecond(Object newValue){
second= new Value;
}
}
4.翻译泛型表达式,如果擦除返回类型,编译器插入强制类型转换。
Pair<Employee> buddies = ...;
Employee buddy = buddies.getFirst();
擦除getFirst 方法类型后将返回一个Object类型。编译器会自动插入Employee的强制类型转换。
5.翻译泛型方法(这儿不太明白)
public static <T extends Comparable> T min(T[] a) //是一个完整的方法族,但是擦除后只剩下一个方法:
public static Comparable min(Comparable[] a)
java泛型转换的事实:
虚拟机中没有泛型
所有的类型参数都用它们的限定类型替换
桥方法被何尝来保持多态为保持类型安全性,必要时插入强制类型转换
—-这个简直就是稀烂的笔记
* 具体参见java核心技术 原书第九版卷一 ch 12.5 P 534