转换 Arrays.asList 导致异常:java.util.Arrays$ArrayList 不能转换为 java.util.ArrayList [英] casting Arrays.asList causing exception: java.util.Arrays$ArrayList cannot be cast to java.util.ArrayList
问题描述
我是 Java 新手,想了解为什么第一个代码片段不会导致此异常,而第二个会导致此异常.由于在两种情况下都将字符串数组传递到 Arrays.asList 中,因此两个片段不应该产生异常还是不产生异常?
I'm new to Java and am trying to understand why the first code snippet doesn't cause this exception but the second one does. Since a string array is passed into Arrays.asList in both cases, shouldn't both snippets produce an exception or not produce an exception?
Exception in thread "main" java.lang.ClassCastException: java.util.Arrays$ArrayList cannot be cast to java.util.ArrayList
第一个片段(无一例外):
First snippet (causes no exception):
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));
第二个片段(导致上述异常):
Second snippet (causes above exception):
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.
If relevant, I'm using JavaSE 1.6 in Eclipse Helios.
推荐答案
对我来说(使用 Java 1.6.0_26),第一个片段给出了与第二个相同的异常.原因是 Arrays.asList(..)
方法只返回一个List
,不一定是ArrayList
.因为您并不真正知道该方法返回的 List
的类型(或实现),所以您对 ArrayList
的转换不是安全的.结果是它可能会或可能不会按预期工作.从编码风格的角度来看,一个很好的解决方法是将您的 stuff
声明更改为:
For me (using Java 1.6.0_26), the first snippet gives the same exception as the second one. The reason is that the Arrays.asList(..)
method does only return a List
, not necessarily an ArrayList
. Because you don't really know what kind (or implementation of) of List
that method returns, your cast to ArrayList<String>
is not safe. The result is that it may or may not work as expected. From a coding style perspective, a good fix for this would be to change your stuff
declaration to:
List<List<String>> stuff = new ArrayList<List<String>>();
这将允许添加任何来自 Arrays.asList(..)
方法的内容.
which will allow to add whatever comes out of the Arrays.asList(..)
method.
这篇关于转换 Arrays.asList 导致异常:java.util.Arrays$ArrayList 不能转换为 java.util.ArrayList的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!