java - 将对象转换为数组

标签 java arrays

所以我有一个可能是数组的对象。它也可以是原始的或字符串。如果它是一个数组,它可以是任何字面上的数组。

我没问题弄清楚它是否是一个数组,但我似乎无法将它转换成任何我可以迭代以获取值的东西。

// o is an object and clazz is the class of the o
if (clazz == Array.class) {
            Class ofArray = o.getClass().getComponentType();
            String arrayType = ofArray.getName(); // 'Double' for my test case
            //ERROR: [D cannot be cast to [Ljava.lang.Object 
            Object[] objects = (Object[]) o; 
    }

我的背景是 ruby​​ 和 php(它可以正常工作),静态类型让我头疼。有什么想法吗?

编辑:

这会引发错误

[D cannot be cast to [Ljava.lang.Object.

我错过了什么?

if (o.getClass().isArray()) {
    Object[] objects = (Object[]) o;  
}

最佳答案

如果您不想为所有原始类型进行切换,您可以这样做:

if (ofArray.isPrimitive()) {
    int length = Array.getLength(o);
    for (int i = 0; i < length; i++) {
        Object obj = Array.get(o, i);
        System.out.println(obj);
    }
}
else {
    Object[] objects = (Object[]) o;
    for (Object obj : objects) {
        System.out.println(obj);
    }
}

编辑: 如果您不想在代码中的两个不同位置循环,请使用此方法将原始数组转换为对象数组:

static Object[] convertToObjectArray(Object array) {
    Class ofArray = array.getClass().getComponentType();
    if (ofArray.isPrimitive()) {
        List ar = new ArrayList();
        int length = Array.getLength(array);
        for (int i = 0; i < length; i++) {
            ar.add(Array.get(array, i));
        }
        return ar.toArray();
    }
    else {
        return (Object[]) array;
    }
}

关于java - 将对象转换为数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16427319/

相关文章:

java - 退出 JSF 流

java - 如何使用 Intellij 解决 Java 中的 fileNotFoundException

javascript - 如何从另一个对象向 json 对象添加数据?

java - 在java中访问有点奇怪的JSONObject

javascript - 刮掉一些数组值以进行断言( Protractor )

java - 如何在 Junit 控制台中接受来自用户的输入

java - 使用 jquery ajax 调用托管 bean 方法并在 jquery 中取回结果

java - Android - 使用数组动态添加图像到列表

c++ - 防止数组元素的默认构造

android - 如何改变android中字符串数组资源的颜色