虚拟机内部是不认识泛型的,编译的工作就是把泛型的类型替换成最能“万精油”的类型。
1 类型擦除
这才是真正编译器里面的代码。
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 setFirst(Object newValue) { first = newValue; }
public void setSecond(Object newValue) { second = newValue; }
}
如果有多个限定,则默认选取第一个限定作为擦除后的替换类。
2 翻译泛型表达式
其实就是表达式前面自动加上强制类型转换而已。
3 翻译泛型方法
类型擦除后,可能产生方法冲突的问题,但是Java编译器会帮你解决的。
- Java虚拟机没有泛型类
- 所有的参数都用限定类型替换
- 桥方法用来保护多态
- 为保证类型的安全性,必要时插入强制类型转换。
4 调用遗留代码
不知道说的什么东东
713

被折叠的 条评论
为什么被折叠?



