3 回答
TA贡献1880条经验 获得超4个赞
Ross,你也可以使用Arrays.copyof()或Arrays.copyOfRange()。
Integer[] integerArray = Arrays.copyOf(a, a.length, Integer[].class);
Integer[] integerArray = Arrays.copyOfRange(a, 0, a.length, Integer[].class);
这里击中的原因ClassCastException是你不能将数组Integer视为数组Object。Integer[]是一个子类型Object[]但Object[]不是Integer[]。
以下也不会给出一个ClassCastException。
Object[] a = new Integer[1];
Integer b=1;
a[0]=b;
Integer[] c = (Integer[]) a;
TA贡献1797条经验 获得超4个赞
您无法将Object
数组转换为Integer
数组。你必须循环遍历a的所有元素并单独抛出每个元素。
Object[] a = new Object[1];Integer b=1;a[0]=b;Integer[] c = new Integer[a.length];for(int i = 0; i < a.length; i++){ c[i] = (Integer) a[i];}
编辑:我相信这个限制背后的基本原理是,在进行转换时,JVM希望在运行时确保类型安全。由于数组Objects
可以是任何其他内容Integers
,因此JVM必须执行上述代码正在执行的操作(单独查看每个元素)。语言设计者决定他们不希望JVM这样做(我不确定为什么,但我确定这是一个很好的理由)。
但是,您可以施放亚型阵列到阵列父(例如Integer[]
到Object[]
)!
TA贡献1776条经验 获得超12个赞
或者执行以下操作:
... Integer[] integerArray = new Integer[integerList.size()]; integerList.toArray(integerArray); return integerArray;}
添加回答
举报