Javaj是伪泛型, 为什么可以做到消除强制类型转化
本帖最后由 bugunao1 于 2014-05-08 17:32:22 编辑
我知道Java会在编译后把所有的泛型信息都擦除掉,是伪泛型。下面给出的是ArrayList<E>的get方法实现:
public E get(int index) {
RangeCheck(index);
return (E) elementData[index];
}
我的理解是, 泛型信息擦除后变成了:
public Object get(int index) {
RangeCheck(index);
return (Object) elementData[index];
}
所以
ArrayList<String> list = new ArrayList<String>();
list.add("abcde");
Object obj = list.get(0); // 这里应该返回是Object, 但实际返回是String
请问它是如何做到类型转化的呢?这点我想不通,谢谢
。。
------解决方案--------------------正如楼主所说 java是伪泛型,他是在编译的时候 javac就把类型擦除掉,并且加上强制转换,所以上边的代码
ArrayList<String> list = new ArrayList<String>();
list.add("abcde");
Object obj = list.get(0);
在编译之后会变成:
ArrayList list = new ArrayList();
list.add("abcde");
String obj =(String) list.get(0);