gpt4 book ai didi

Java 集合 ArrayList、LinkedList 抛出异常

转载 作者:行者123 更新时间:2023-12-02 14:55:53 25 4
gpt4 key购买 nike

我发现了一个至今无法解释的离奇案例。

 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));
}

执行结果为:

Exception in thread "main" java.lang.ClassCastException: java.util.LinkedList cannot be cast to java.util.ArrayList

for 循环中出现异常。

问题是:如何?返回类型为 ArrayList< ArrayList< Integer>> 的方法如何返回 LinkedList?

最佳答案

您的方法返回一个原始的ArrayList,这就是编译器允许它的原因。但是,在运行时,尝试将 LinkedList(您传递给 getBatches 方法的实例)转换为 ArrayList,从而导致ClassCastException.

如果您将方法更改为:

private static ArrayList<ArrayList<Integer>> getBatches(List<Integer> optionIds) {
return new ArrayList<>(Arrays.asList(optionIds));
}

你会得到一个编译错误。

为避免编译和运行时错误,您需要将传递给方法的 List 转换为 ArrayList:

private static ArrayList<ArrayList<Integer>> getBatches(List<Integer> optionIds) {
return new ArrayList<>(Arrays.asList(new ArrayList<>(optionIds)));
}

这将返回一个 ArrayList,其单个元素是一个 ArrayList,其中包含与传递给该方法的 List 相同的元素。

关于Java 集合 ArrayList、LinkedList 抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52942499/

25 4 0