java - Java 中多维数组的 ClassCastException

标签 java arrays arraylist classcastexception

我试图理解以下代码块背后的执行逻辑:

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/

相关文章:

java - 变量可能尚未初始化(抽象类)

java - swing 中的 JTable 可点击标题

java - 将外部 jar (lib/*.jar) 添加到 IntelliJ IDEA 项目的正确方法

java - Icefaces 2 插件问题

java - 验证 ArrayList 的元素以匹配参数 (Java)

java.lang.ArrayIndexOutOfBoundsException : 1

c# - 试图创建一个包含结构的数组?

javascript - JS 下划线 : array of dicts in pairs

java - 如何添加通过解析获得的值以获得 "value"的 "column"?

java - 以正确的格式管理/填充 HashMap 中的数据