8.5 泛型代码和虚拟机
目录
- 8.5.1 类型擦除
- 8.5.2 翻译泛型表达式
- 8.5.3 翻译泛型方法
- 虚拟机没有泛型类型对象—
所有对象都属于普通类
8.5.1 类型擦除
- 无论何时定义一个泛型类型,都自动提供了一个相应的
原始类型(raw type)
. - 原始类型的名字就是删去类型参数后的泛型类型名
擦除(erased)
类型变量,并替换为限定类型
//Pair<T>的原始类型
//因为T是一个无限定的对象,所以直接用Object替换
public class Pair{
private Object first;
private Object second;
public Pair(Object first,Object second){
this.first=first;
this.second=second;
}
public Object getFirst(){return first;}
public Object getSecond(){return second;}
public void setFisrt(Object newValue){ this.first=newValues;}
public void setSecond(Object newValue){ this.second=newValues;}
}
- 原始类型用第一个限定的类型变量来替换,如果没有给定限定就用Object替换
//泛型类
public class Interval<T extends Comparable & Serializable> implements Serializable{
private T lower;
private T upper;
//........
public Interval(T first,T second){
if(first.compareTo(second)<=0) {
lower=first;
upper=second;
}
else{
lower=second;
upper=first;
}
}
}