1700447071
1700447072
//获得一个元素
1700447073
1700447074
public E get(int index){
1700447075
1700447076
RangeCheck(index);
1700447077
1700447078
//返回前强制类型转换
1700447079
1700447080
return(E)elementData[index];
1700447081
1700447082
}
1700447083
1700447084
}
1700447085
1700447086
注意看elementData的定义,它容纳了ArrayList的所有元素,其类型是Object数组,因为Object是所有类的父类,数组又允许协变(Covariant),因此elementData数组可以容纳所有的实例对象。元素加入时向上转型为Object类型(E类型转为Object),取出时向下转型为E类型(Object转为E类型),如此处理而已。
1700447087
1700447088
在某些情况下,我们确实需要泛型数组,那该如何处理呢?代码如下:
1700447089
1700447090
class Foo<T>{
1700447091
1700447092
//不再初始化,由构造函数初始化
1700447093
1700447094
private T t;
1700447095
1700447096
private T[]tArray;
1700447097
1700447098
private List<T>list=new ArrayList<T>();
1700447099
1700447100
//构造函数初始化
1700447101
1700447102
public Foo(){
1700447103
1700447104
try{
1700447105
1700447106
Class<?>tType=Class.forName(””);
1700447107
1700447108
t=(T)tType.newInstance();
1700447109
1700447110
tArray=(T[])Array.newInstance(tType,5);
1700447111
1700447112
}catch(Exception e){
1700447113
1700447114
e.printStackTrace();
1700447115
1700447116
}
1700447117
1700447118
}
1700447119
1700447120
}
[
上一页 ]
[ :1.700447071e+09 ]
[
下一页 ]