日期:2014-05-20  浏览次数:20919 次

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);