返回信息流package GenericArray;
public class GenericArray<T> {
private T[] array;
@SuppressWarnings("unchecked")
public GenericArray(int sz) {
array = (T[]) new Object[sz];
}
public void put(int index, T item) {
array[index] = item;
}
public T get(int index) {
return array[index];
}
public T[] rep() {
return array;
}
public static void main(String[] args) {
GenericArray<Integer> gai = new GenericArray<Integer>(10);
System.out.println(gai.getClass());
System.out.println(gai.getClass().getTypeParameters());
Integer in=gai.get(0);
Integer[] ia = gai.rep();
//Object[] oa = gai.rep();
}
}
为什么get()获得元素赋值给Integer可以,而rep()方法获得数组赋给Integer数组就会抛转型异常
这是一条镜像帖。来源:北邮人论坛 / java / #44074同步于 2015/9/10
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
Java泛型数组
hunanmange
2015/9/10镜像同步7 回复
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
【 在 zlwmosquito 的大作中提到: 】
: 因为array的真实类型是Object[]
那get方法返回的不也是Array里面的元素吗?
【 在 hunanmange 的大作中提到: 】
: 那get方法返回的不也是Array里面的元素吗?
数组中元素的类型和数组本身的类型是两回事
GenericArray<Integer> gai = new GenericArray<Integer>(10);指定了泛型实际类型为Integer,当使用gai.get(0).getClass()会发现,数组元素类型确实为Integer(当然你的没有初始化会抛空指针异常),但是泛型数组因为类型擦除的原因,一定会擦为Object[],这一点是肯定的.Object为所有类的父类,所以数组元素的类型为Integer也就没什么问题了。我猜的[ema11]