转换 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

查看:36
本文介绍了转换 Arrays.asList 导致异常:java.util.Arrays$ArrayList 不能转换为 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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆