6
public static void main(String[] args) throws Exception {
    int[] a = new int[] { 1, 2, 3 };
    method(a);
}

public static void method(Object o) {
    if (o != null && o.getClass().isArray()) {
        Object[] a = (Object[]) o;
        // java.lang.ClassCastException: [I cannot be cast to [Ljava.lang.Object;
    }
}

我不应该知道o. method然后我怎样才能将它转换成一个Object[]数组?

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

PS:我已经看到几个关于 SO 处理数组转换的问题,但没有人(还没有?)你不知道数组的类型。

4

4 回答 4

7

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

于 2013-04-11T12:28:01.630 回答
5

您不能将原始数组(int在您的情况下为 s )转换为 s 数组Object。如果你改变:

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

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

它应该工作。

于 2013-04-11T12:25:11.590 回答
4

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

public static void method(Object o) {
    if (o instanceof int[]) {
        int[] a = (int[]) o;
        // ....
    }
}
于 2013-04-11T12:23:39.097 回答
3

选项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 之外的任何类型来确定它是什么类型的数组,并在需要时强制转换为它。

于 2013-04-11T12:23:32.290 回答