将对象转换为数组

sp0*_*00m 6 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

我不应该知道什么是该参数的类型omethod.我怎么能把它投射到Object[]数组中?

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

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

jab*_*bal 7

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

  • +1和`Array.getLength()`得到它的长度. (3认同)

cod*_*box 5

您不能将基本数组(int在您的情况下为Objects )转换为s 数组.如果你改变:

int[] a = new int[] { 1, 2, 3 };
Run Code Online (Sandbox Code Playgroud)

Integer[] a = new Integer[] { 1, 2, 3 };
Run Code Online (Sandbox Code Playgroud)

它应该工作.