转换 Arrays.asList 导致异常: java.util.Arrays$ArrayList 无法转换为 java.util.ArrayList

2024-03-13

我是 Java 新手,我试图理解为什么第一个代码片段不会导致此异常,但第二个代码片段会导致此异常。由于在这两种情况下都将字符串数组传递到 Arrays.asList 中,因此两个片段是否都应该产生异常或不产生异常?

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

第一个片段(没有例外):

ArrayList<ArrayList<String>> stuff = new ArrayList<ArrayList<String>>();
String line = "a,b,cdef,g";
String delim = ",";
String[] pieces = line.split(delim);
stuff.add((ArrayList<String>) Arrays.asList(pieces));

第二个片段(导致上述异常):

ArrayList<ArrayList<String>> stuff = new ArrayList<ArrayList<String>>();
String[] titles = {"ticker", "grade", "score"};
stuff.add((ArrayList<String>) Arrays.asList(titles));

如果相关的话,我在 Eclipse Helios 中使用 JavaSE 1.6。


对于我(使用 Java 1.6.0_26),第一个片段给出了与第二个片段相同的异常。原因是,Arrays.asList(..) http://download.oracle.com/javase/1.4.2/docs/api/java/util/Arrays.html#asList%28java.lang.Object%5B%5D%29方法只返回一个List,不一定是ArrayList。因为你真的不知道哪种(或实施) of List该方法返回,您的转换为ArrayList<String>不安全。结果是它可能会或可能不会按预期工作。从编码风格的角度来看,一个很好的解决方法是改变你的stuff声明至:

List<List<String>> stuff = new ArrayList<List<String>>();

这将允许添加任何来自Arrays.asList(..) method.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

转换 Arrays.asList 导致异常: java.util.Arrays$ArrayList 无法转换为 java.util.ArrayList 的相关文章

随机推荐