我有一个
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')
。
我不想使用流、复制数组或任何其他修改或转换。只是直接投射,甚至可能通过反射。
有什么选择吗?
事实上,
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
}