java.lang.ClassCastException-访问对象数组的java数组,如二维对象数组
为了解决用JNI在C代码中创建的对象数组的问题,我用对象数组数组创建了纯Java代码,如下所示。 我希望使用[][]操作符以类似于二维对象数组(对象[][])的方式访问此数组。但是,当将数组强制转换为对象[][]时,代码崩溃,出现以下异常 java.lang.ClassCastException:[Ljava.lang.Object;无法强制转换为 [[Ljava.lang.Objectjava.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 有人能帮我吗?当声明一维数组,然后在每个单元格中添加数组时,您正在构建以下内容: [ [][][] ] [
有人能帮我吗?当声明一维数组,然后在每个单元格中添加数组时,您正在构建以下内容:
[ [][][] ] [ [][][] ] [ [][][] ]
无法使用[]]
访问它,因为它只有一行,而每个单元格又有一行对象,因此需要使用“笨拙的强制转换”来访问它
如果需要柱结构,请执行以下操作:
[] [] []
[] [] []
[] [] []
应使用以下内容创建该文件:
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