泛型的擦除
本帖最后由 yiqiu2324 于 2013-05-21 21:50:35 编辑 http://blog.csdn.net/lonelyroamer/article/details/7868820
在这篇博文中,作者详细讲了泛型.
但有个疑问,那就是使用了泛型的源文件在编译为字节码文件,源文件中的泛型(没有上限/下限)
会被擦除,并且所有的泛型变量会被替换为原始类型,那么内部如何发生强转?(由Object->指定类型?)
作者在谈这个说:
<摘自原话>
2、自动类型转换
因为类型擦除的问题,所以所有的泛型类型变量最后都会被替换为原始类型。这样就引起了一个问题,既然都被替换为原始类型,那么为什么我们在获取的时候,不需要进行强制类型转换呢?看下ArrayList和get方法:
public E get(int index) {
RangeCheck(index);
return (E) elementData[index];
}import java.util.ArrayList;
import java.util.List;
public class RawTypeTest {
public static void main(String[] args){
List list=new ArrayList();
list.add("ab");
list.add("cd");
List<Integer> intList=list;
for(int i=0;i<intList.size();++i)
System.out.println(intList.get(0));//这里为什么不会把类型转换异常?
} //返回类型为Integer,集合中的元素为String
}
public E get(int index) {
RangeCheck(index);
return (E) elementData[index];//执行到这个位置,不会发生类型转换异常吗?
}