62,620
社区成员
发帖
与我相关
我的任务
分享public E get(int index) {
RangeCheck(index);
return (E) elementData[index];
}
ArrayList<Dog> myLIst = new ArrayList<Dog>();从这可以看出lz用的是5.0及以上的版本。当你new一个对象时,你已经为ArrayList的泛型E赋值了Dog,在get时是会进行强制类型转化的((E) elementData[index];)。 不过有一点不是太明白lz这样写get(0).eat();不报错??
针对你说的旧版本的旧版Object get( int index); (5.0之前的)
源码基本类似,不过没有泛型,也没有强制类型转换,返回的就是一个Object类型。
源码:public Object get(int index) {
RangeCheck(index);
return elementData[index];
}
注:在jdk新版本中如果未进行泛型设置时,ArrayList myLIst = new ArrayList(); 相当于ArrayList<Object> myLIst = new ArrayList<Object>();
那么如果get返回的是Object类型,向下调用eat方法,编译肯定会报错的[/quote]
1.8的jdk是我上面这么写的,不知道你看的是1.x的。各个版本的jdk偶尔会有微小的变化。public E get(int index) {
RangeCheck(index);
return (E) elementData[index];
}
ArrayList<Dog> myLIst = new ArrayList<Dog>();从这可以看出lz用的是5.0及以上的版本。当你new一个对象时,你已经为ArrayList的泛型E赋值了Dog,在get时是会进行强制类型转化的((E) elementData[index];)。 不过有一点不是太明白lz这样写get(0).eat();不报错??
针对你说的旧版本的旧版Object get( int index); (5.0之前的)
源码基本类似,不过没有泛型,也没有强制类型转换,返回的就是一个Object类型。
源码:public Object get(int index) {
RangeCheck(index);
return elementData[index];
}
注:在jdk新版本中如果未进行泛型设置时,ArrayList myLIst = new ArrayList(); 相当于ArrayList<Object> myLIst = new ArrayList<Object>();
那么如果get返回的是Object类型,向下调用eat方法,编译肯定会报错的
public E get(int index) {
rangeCheck(index);
return elementData(index);
}