Dmi*_*tri 2 java collections arraylist classcastexception
我找到了一个奇怪的案例,到目前为止我无法解释.
public static void main(String[] args) {
LinkedList<Integer> a = new LinkedList<>();
a.add(2);
a.add(3);
a.add(4);
for (ArrayList ax : getBatches(a)){
System.out.println(ax);
}
}
private static ArrayList<ArrayList<Integer>> getBatches(List<Integer> optionIds) {
return new ArrayList(Arrays.asList(optionIds));
}
Run Code Online (Sandbox Code Playgroud)
执行结果是:
线程"main"中的异常java.lang.ClassCastException:java.util.LinkedList无法强制转换为java.util.ArrayList
for循环中的异常.
问题是:如何?返回类型ArrayList <ArrayList <Integer >>的方法如何返回LinkedList?
您的方法返回raw ArrayList
,这就是编译器允许的原因.但是,在运行时期间,会尝试将LinkedList
(传递给您的getBatches
方法的实例)强制转换为a ArrayList
,导致ClassCastException
.
如果您将方法更改为:
private static ArrayList<ArrayList<Integer>> getBatches(List<Integer> optionIds) {
return new ArrayList<>(Arrays.asList(optionIds));
}
Run Code Online (Sandbox Code Playgroud)
你会得到一个编译错误.
要避免编译和运行时错误,您需要将List
传递给您的方法转换为ArrayList
:
private static ArrayList<ArrayList<Integer>> getBatches(List<Integer> optionIds) {
return new ArrayList<>(Arrays.asList(new ArrayList<>(optionIds)));
}
Run Code Online (Sandbox Code Playgroud)
这将返回一个ArrayList
元素,其元素ArrayList
包含与List
传递给方法相同的元素.
归档时间: |
|
查看次数: |
330 次 |
最近记录: |