表达式的类型必须是数组类型,但它将解析为Object

时间:2011-09-10 03:54:40

标签: java arrays object

我希望这可以编译,但我不断收到错误“表达式的类型必须是数组类型,但它被解析为Object”。有一个简单的解决方法吗?

public class NodeTest {
    public static void main(String[] args) {

    Object[] arr = new Object[5]; // each element of object will be an array of integers.
    for(int i = 0; i < 5; i++){
        int[][] a = new int[2*(i+1)][2*(i+1)];
        arr[i] = a;
    }
    arr[0][0][0] = 0; //error here
}

}

3 个答案:

答案 0 :(得分:6)

arrObject[],因此arr[0]将返回Object

但是,由于您知道arr包含int[][]作为Object的实例,因此您必须将它们强制转换为<{1}}。

( ( int[][] ) arr[0] )[0][0] = 0;

答案 1 :(得分:4)

您希望将arr声明为int[][][]而不是Object[]。虽然数组的类型为Object,因此循环中的赋值是合法的,然后您丢失了该类型信息,因此编译器不知道arr中的int[][]元素是int[][][] arr = new int[5][][]; for(int i = 0; i < arr.length; i++) { //good practice not to hardcode 5 arr[i] = new int[2*(i+1)][2*(i+1)]; } arr[0][0][0] = 0; //compiles 底线。

{{1}}

答案 2 :(得分:0)

我建议从逻辑角度思考而不是解决问题。

您正在尝试使用多维数组,您的循环在一个维度{根据您的要求可能是正确的}。你可以发布伪代码吗,这可能有帮助

这也有效

public class NodeTest {
    public static void main(String[] args) {
        Object[] arr = new Object[5]; // each element of object will be an array
                                        // of integers.
        for (int i = 0; i < 5; i++) {
            int[][] a = new int[2 * (i + 1)][2 * (i + 1)];
            arr[i] = a;
        }
        arr[0] = 0; // Make it one dimensional
    }
}
相关问题