java.lang.ClassCastException-访问对象数组的java数组,如二维对象数组

java.lang.ClassCastException-访问对象数组的java数组,如二维对象数组,java,arrays,multidimensional-array,classcastexception,Java,Arrays,Multidimensional Array,Classcastexception,为了解决用JNI在C代码中创建的对象数组的问题,我用对象数组数组创建了纯Java代码,如下所示。 我希望使用[][]操作符以类似于二维对象数组(对象[][])的方式访问此数组。但是,当将数组强制转换为对象[][]时,代码崩溃,出现以下异常 java.lang.ClassCastException:[Ljava.lang.Object;无法强制转换为 [[Ljava.lang.Object 有人能帮我吗?当声明一维数组,然后在每个单元格中添加数组时,您正在构建以下内容: [ [][][] ] [

为了解决用JNI在C代码中创建的对象数组的问题,我用对象数组数组创建了纯Java代码,如下所示。 我希望使用[][]操作符以类似于二维对象数组(对象[][])的方式访问此数组。但是,当将数组强制转换为对象[][]时,代码崩溃,出现以下异常

java.lang.ClassCastException:[Ljava.lang.Object;无法强制转换为 [[Ljava.lang.Object


有人能帮我吗?

当声明一维数组,然后在每个单元格中添加数组时,您正在构建以下内容:

[ [][][] ] [ [][][] ] [ [][][] ]
无法使用
[]]
访问它,因为它只有一行,而每个单元格又有一行对象,因此需要使用“笨拙的强制转换”来访问它

如果需要柱结构,请执行以下操作:

[] [] []
[] [] []
[] [] []
应使用以下内容创建该文件:

Object[][] outerArray = new Object[3][5];

创建数组时,它总是有一个类型。其目的是在以后读取并“使用”数组中存储的项作为另一个类型(*)时,保护您免受一类编程错误的影响。数组的类型是
Object[]。class
并且您不能将其强制转换为
Object[].class
仅仅因为数组中的对象是
Object[]
。您也可以放置
Integer
,系统不会抛出
ArrayStoreException
,因为
Integer
对象的子类型

您可以将数组创建(并声明)为
对象[]【】
,或者使用“笨拙”强制转换

(*)仍然可能发生这种情况,直到运行时才知道

public class ArraysQuirks {
    public static void main(String... args) {
        String[] strings = {"a", "b", "c"};
        Object[] objects = strings;
        objects[0] = 1; // ArrayStoreException here
    }
}
这是一个语法错误。对象[]表示您将声明一个对象的多个数组。只需如下更改:

Object[][] temp= (Object[][])outerArray; //it works

为什么不首先将其声明为
Object[][]
?您好,您的outerArray是一维的,因此您不能强制转换。例外情况是,1d数组不能“使用[][]运算符”强制转换为2d数组--它不是运算符!它只是一个括号,而不是一个括号,您将使用两个括号,例如int[][]是一个二维整数数组。请询问并运行。@用户:当您寻求帮助时,请停留几分钟,回答试图帮助您的人提出的问题。
 Object[][] = (Object[][])outerArray;     // (2) Runtime error!!
Object[][] temp= (Object[][])outerArray; //it works