当前位置: 首页 > 面试题库 >

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

冷英光
2023-03-14
问题内容

我是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(..)方法仅返回a
List,不一定返回a ArrayList。由于您实际上并不知道该方法返回的是哪种类型(或 实现
),List因此强制转换ArrayList<String>为不安全。结果是它可能无法正常工作。从编码风格的角度来看,一个好的解决方法是将您的stuff声明更改为:


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

这将允许添加方法中产生的任何内容Arrays.asList(..)



 类似资料: