将对象转换为数组

时间:2013-04-11 12:20:13

标签: java arrays reflection casting

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 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:5)

您无法将基本数组(在您的情况下为int)转换为Object的数组。如果你改变:

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

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

它应该有用。

答案 2 :(得分:4)

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

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

答案 3 :(得分:3)

选项1

使用 o.getClass()。getComponentType()来确定它的类型:

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

请参阅Demo


选项2

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

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