我试图理解以下代码块的执行逻辑:
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,目标类型也无法解析或提升为有效类型? 任何解释都将不胜感激!我只是想了解这种代码执行是否必须避免或处理异常以输出更适合用户需求的内容。
List.toArray
返回一个Object[]
。它怎么可能返回其他东西呢? - Boris the Spiderint[]
数组。它是“锯齿形”的。它不是一个 MD 数组。 - Boris the Spider