如何直接将对象数组转换为整数数组而不进行修改

问题描述 投票:0回答:1

我有一个

Object
s 数组,里面充满了
String
s:

Object[] array = new Object[count];
for (int i = 0; i < array.length; i++) {
  array[i] = String.valueOf(i);
}

然后我用

Integer
s 重新填充它:

for (int i = 0; i < array.length; i++) {
  array[i] = Integer.parseInt(array[i]);
}

我想返回一个类型为

Integer[]
的对象。当我这样做时:

return (Integer[]) array;

return Integer[].class.cast(array);

我明白了

Exception in thread "main" java.lang.ClassCastException: class [Ljava.lang.Object; cannot be cast to class [Ljava.lang.Integer; ([Ljava.lang.Object; and [Ljava.lang.Integer; are in module java.base of loader 'bootstrap')

我不想使用流、复制数组或任何其他修改或转换。只是直接投射,甚至可能通过反射。

有什么选择吗?

java arrays reflection casting
1个回答
0
投票

事实上,

Object[]
充满了
Integer
的实例, 使其成为
Integer[]
。有一个简单的思考方法 - 即使现在充满了
Integer
,也没有什么可以阻止你做
array[0] = "I am not an Integer"

简而言之,这样的演员阵容是不可能的。实现此目的的唯一方法是将此数组的内容复制到实际的

Integer[]
,例如,通过使用流:

Integer[] integerArray = Arrays.stream(array).toArray(Integer[]::new);

或者,您可以在使用之前转换从数组中检索的任何元素:

for (Object o : array) {
    Integer i = (Integer) o;
    // Use i for something
}
© www.soinside.com 2019 - 2024. All rights reserved.