我正在尝试这样做
List<String> stringList = new ArrayList<String>();
stringList.add("one");
stringList.add("two");
stringList.add("three");
(String[]) stringList.toArray();
为什么这会给我类强制转换异常?
Caused by: java.lang.ClassCastException: [Ljava.lang.Object;
答案 0 :(得分:9)
您的代码失败的原因是因为.toArray()
返回了Object[]
类型的数组,您无法将其转换为String[]
。要修复它,请使用另一个toArray(T[] a)
即
stringList.toArray(new String[0]);
答案 1 :(得分:8)
最好再试试这个method:
String[] stringArray = stringList.toArray(new String[stringList.size()]);
这样返回的数组就是你需要的确切类型,不需要强制转换。您调用的method会返回Object[]
,而非String[]
,而您尝试执行的广告无效。
答案 2 :(得分:3)
由于toArray()
类的List
方法返回Object[]
而不是String[]
,并且您无法从Object[]
投射到String[]
。但是,正确的方法是:
String[] array = new String[stringList.size()];
stringList.toArray(array);
或:
String[] array = stringList.toArray(new String[stringList.size());
答案 3 :(得分:2)
您无法强制转换为String数组。你想要:
String [] test = stringList.toArray(new String [stringList.size()]);
答案 4 :(得分:2)
ArrayList<T>.toArray()
方法返回类型Object
的数组,因为这是完全可以接受的事情。事实上,由于类型擦除,它是唯一可以做的事情。
如果要获取String
类型的数组,请调用ArrayList<T>.toArray(T[])
方法。在你的情况下,你会这样称呼它:
stringList.toArray(new String[3]);
调用它会将ArrayList
内容填充到提供的String
数组中。