wqb*_*ill 7 java arrays casting object
list.toArray()返回Object [],并且仅包含int []。所以我认为我可以将其直接转换为int [] []。但是实际上我错了,它将导致强制转换异常。
list.toArray(new int[list.size()][]);
Run Code Online (Sandbox Code Playgroud)
这样就可以了,但是我还是很困惑。
List<int[]> list = new ArrayList<>();
//some code
//cast exception
return (int[][])list.toArray();
//this way is ok
return list.toArray(new int[list.size()][]);
Run Code Online (Sandbox Code Playgroud)
为什么会引发该异常?
这里:
//cast exception
return (int[][])list.toArray();
Run Code Online (Sandbox Code Playgroud)
由于类型擦除,此代码创建了一个实际的Object数组。对象数组不是整数数组,因此无法强制转换。一个装鸡蛋的盒子不会变成牛奶瓶,只是因为你尖叫着“看着,变成一个瓶子”。
要明确地说:上述调用不知道要使用的确切类型,因此必须使用该基本default Object[]
。并且由于int[]
是Object类型的,因此该列表方法可以将这些数组存储到结果数组中。一个对象数组,每个对象都是一个int数组。
但在这里:
return list.toArray(new int[list.size()][]);
Run Code Online (Sandbox Code Playgroud)
您明确地说返回的数组应该是type int[][]
。因此,在运行时,该方法的主体知道它应该返回该类型。
仅作记录:您可能更喜欢
return list.toArray(new int[0][]);
Run Code Online (Sandbox Code Playgroud)
提供“已调整大小”的数组是早期的遗留物,通常在2019年,您更喜欢传递一个空数组。
归档时间: |
|
查看次数: |
59 次 |
最近记录: |