在java中将原始类型的数组转换为对象数组

为什么我不能在java中这样做?

Object[] o = (Object[])(new int[]{0,1,2,3.14,4});

我有一个方法接收一个对象,然后将其表示为一个字符串,但根据他的类型(原始,原始的包装器,数组等)。当我创建一个单元测试,我正在传递一个数组作为对象,这是好的,但是当我将对象转换为Object []时,我得到ClassCastException。
这只发生在原始类型的数组中。有没有办法避免这种行为?如果没有,有人可以解释Java虚拟机上这种行为的原因是什么。

任何帮助是非常感谢。

原始类型不能以这种方式转换。
在你的情况下,有一个双重值的数组,因为3.14。
这将工作:

    List<Object> objectList = new ArrayList<Object>();
    objectList.addAll(Arrays.asList(0,1,2,3.14,4));

即使这样做:

List<Object> objectList = new ArrayList<Object>();
objectList.addAll(Arrays.asList(0,"sfsd",2,3.14,new Regexp("Test")));
for(Object object:objectList)
{
    System.out.println(object);
}

UPDATE
好的,就像有说的那样,没有直接的方法来将一个原始数组转换成一个Object []。
如果你想要一个方法来转换String中的任何数组,我可以这样建议

public class CastArray {

    public static void main(String[] args) {
        CastArray test = new CastArray();
        test.TestObj(new int[]{1, 2, 4});
        test.TestObj(new char[]{'c', 'a', 'a'});
        test.TestObj(new String[]{"fdsa", "fdafds"});
    }

    public void TestObj(Object obj) {
        if (!(obj instanceof Object[])) {
            if (obj instanceof int[]) {
                for (int i : (int[]) obj) {
                    System.out.print(i + " ");
                }
                System.out.println("");
            }
            if (obj instanceof char[]) {
                for (char c : (char[]) obj) {
                    System.out.print(c + " ");
                }
                System.out.println("");
            }
            //and so on, for every primitive type.
        } else {
            System.out.println(Arrays.asList((Object[]) obj));
        }
    }
}

是的,为每个原始类型写一个循环是令人厌烦的,但没有其他方式,IMHO。

http://stackoverflow.com/questions/5606338/cast-primitive-type-array-into-object-array-in-java

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:在java中将原始类型的数组转换为对象数组