public E get(int index) {
RangeCheck(index);
return (E) elementData[index];
}
比如这块ArrayList中的方法,正常编程的时候当传入一个String类型时,调用这个方法会返回String
类型的值。但是,按照java泛型的编译时类型擦除的概念,运行时该方法应该是如下的形式
public Object get(int index) {
RangeCheck(index);
return (Object) elementData[index];
}
因此返回的是Object类型,可事实不是这样的。那是不是在add的时候编译器记住了参数的类型呢?
那如果记住了参数类型,直接替换泛型类型参数不就行了么?
------解决方案--------------------
不是add的时候记住了参数类型,是编译的时候会检查参数类型,以免执行时add了非String类型对象。
list内部是按照Object类型引用的,get方法返回的时候内部表示也是Object,但是接受get方法返回结果的变量是String类型,这时结果会被自动转换为String类型。这个转换是一定成功的,因为list里面实际保存的也都是String的对象。
------解决方案--------------------
理解应该是对的,不过,泛型就是在有未知类型的时候才会使用,如果知道,不使用也是一样的,
------解决方案--------------------
public Object get(int index) 这个Object 是定义你要返回的数据类型。并不是你传入的。不知道怎么跟你说,反正能够理解。