我试图理解以下代码块背后的执行逻辑:
Integer[][] mdArray = new Integer[][] { { 1, 2 }, { 3, 4 }, { 5, 6 },
{ 7, 8 } };
List<Integer[]> mdArrayList = new ArrayList<Integer[]>();
// Iterate through every row of mdArray
for (Integer[] obj : mdArray) {
mdArrayList.add(obj);
}
/* Throws ClassCastException because it cannot resolve the final array size?
*
* i.e. it is a proper RTError.
*
*/
Integer[][] toArray = (Integer[][]) (mdArrayList.toArray());
上面的代码可以正常编译,但在执行最后一行时会在运行时抛出 ClassCastException。我的理解是 JVM 无法在运行时执行此代码,因为即使 toArray() 丢弃了 mdArrayList 中的元素数组,目标类型也无法解析或提升为有效类型?
任何解释将不胜感激!我只是想了解是否必须避免或异常处理这种代码执行以输出更适合用户需求的内容。
最佳答案
你不应该转换。将 Integer[][]
传递给 toArray
。有点像
Integer[][] toArray = mdArrayList.toArray(new Integer[][] {});
System.out.println(Arrays.deepToString(toArray));
输出是
[[1, 2], [3, 4], [5, 6], [7, 8]]
关于java - Java 中多维数组的 ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27889274/