2

我需要将一个对象转换为一个多维数组,但不知道该怎么做。该对象可能包含任何对象的数组(boolean[][]、int[][]、String[][] 等)。这是一个示例代码:

public static void main(String[] args) {
    boolean[][] b = new boolean[10][10];

    Object o = b;

    Object[][] multiArray = (Object[][])o;

    for(int i = 0; i < multiArray.length; i++) {
        for(int j = 0; j < multiArray[i].length; j++) {
            // Do something
        }
    }
}
4

4 回答 4

4

boolean[][]是一个基元数组,因此尽管数组是协变的,但由于 aboolean不是 a Object,它会给你一个错误,告诉你强制转换是非法的。您可能想使用Boolean[][]. 另请注意,拆箱和装箱不适用于数组。

于 2013-06-13T19:26:48.010 回答
3

你不能这样做。Aboolean是原始类型,而不是引用类型。因此,虽然值的数组(或多维数组)boolean本身是 an Object,但它的元素仍然是boolean值,而不是Object.

如果您想拥有一个对象数组,则需要将boolean值装箱为Boolean对象。

请注意,您仍然可以使用循环编写代码而无需装箱:

for(int i = 0; i < b.length; i++) {
    for(int j = 0; j < b[i].length; j++) {
        // Do something with b[i][j] as a boolean
    }
}
于 2013-06-13T19:27:21.163 回答
1

试试这个,注意原始数组boolean被替换为一个数组Boolean(对其他数据类型的考虑相同,例如:使用Integer代替int等),它们是对象类型,可以转换为Object

public static void main(String[] args) {

    Boolean[][] b = new Boolean[10][10];
    // fill b with values

    Object[][] multiArray = new Object[10][10];

    for(int i = 0; i < multiArray.length; i++) {
        for(int j = 0; j < multiArray[i].length; j++) {
            multiArray[i][j] = b[i][j]; // no cast is needed
        }
    }

}
于 2013-06-13T19:28:30.190 回答
1

转换booleanBoolean. 然后Java可以BooleanObject您转换(作为子类和超类)

于 2013-06-13T19:27:57.323 回答