将对象强制转换为数组 publicstaticvoidmain(字符串[]args)引发异常{ int[]a=新的int[]{1,2,3}; 方法(a); } 公共静态无效方法(对象o){ 如果(o!=null&&o.getClass().isArray()){ 对象[]a=(对象[])o; //java.lang.ClassCastException:[我不能强制转换为[Ljava.lang.Object; } }

将对象强制转换为数组 publicstaticvoidmain(字符串[]args)引发异常{ int[]a=新的int[]{1,2,3}; 方法(a); } 公共静态无效方法(对象o){ 如果(o!=null&&o.getClass().isArray()){ 对象[]a=(对象[])o; //java.lang.ClassCastException:[我不能强制转换为[Ljava.lang.Object; } },java,arrays,reflection,casting,Java,Arrays,Reflection,Casting,我不应该知道方法中参数o的类型。然后如何将其强制转换到对象[]数组中 instanceof不能是解决方案,因为参数可以是任何类型的数组。 PS:我已经看到了一些关于阵型转换的问题,但是没有一个(现在?)你不知道阵型的类型。选项1 使用o.getClass().getComponentType()确定它是什么类型: if (o != null) { Class ofArray = o.getClass().getComponentType(); // returns int } 看 选

我不应该知道
方法
中参数
o
的类型。然后如何将其强制转换到
对象[]
数组中

instanceof
不能是解决方案,因为参数可以是任何类型的数组。


PS:我已经看到了一些关于阵型转换的问题,但是没有一个(现在?)你不知道阵型的类型。

选项1

使用o.getClass().getComponentType()确定它是什么类型:

if (o != null) {
  Class ofArray = o.getClass().getComponentType(); // returns int  
}


选项2

if (o instanceof int[]) {
  int[] a = (int[]) o;           
}

*Noice:您可以使用int以外的任何类型来确定它是什么类型的数组,并在需要时对其进行强制转换。

您不能将此对象强制转换为
对象[]
类,因为实际上这是一个
int
-s的数组。因此,如果您编写:

public static void method(Object o) {
    if (o instanceof int[]) {
        int[] a = (int[]) o;
        // ....
    }
}

无法将基元数组(
int
s)强制转换为
Object
s数组。如果更改:

int[] a = new int[] { 1, 2, 3 };


它应该可以工作。

您可以使用
java.lang.reflect.Array.get()
从未知数组中获取特定元素。

我想这是最好的答案,这个问题错误地认为它需要被强制转换为
对象[]
@sp00m抱歉,我修正了我的答案,您可以在不使用instanceof选项的情况下确定类型,只需使用getClass().getComponentType()。请参阅演示:如果您从不传递原语,您将始终能够强制转换到
对象
,您的问题将得到解决这是在数组中不正确使用对象包装器。这样做会产生内存开销。您是否能够为您的问题提供多一点上下文。您打算如何处理这些对象?这将非常有效由于反射而降低。但是+1作为一个理想的标签,我想这就是他想要的for@sp00m,是的,您应该这样做。这并没有什么问题。查看
java.util.Arrays
类,您将看到,这是基本类型的常见模式。例如,请参阅
java.util.Arrays的方法
hashCode
class。这(以及其他类似的答案)在我看来是最好的。虽然用
if
语句包装方法感觉不好,但如果必须使用
对象作为输入,则确实有必要。
Integer[] a = new Integer[] { 1, 2, 3 };