我看到已经提供了一些解决方案,但没有提供任何原因,所以我将详细解释这一点,因为我相信知道您在做什么错是很重要的,只是为了从给定的答复中获得“成功”。
首先,让我们看看Oracle怎么说
* <p>The returned array will be "safe" in that no references to it are
* maintained by this list. (In other words, this method must
* allocate a new array even if this list is backed by an array).
* The caller is thus free to modify the returned array.
它可能看起来并不重要,但是正如您将看到的那样...那么以下行失败了吗?列表中的所有对象都是String,但不会将它们转换,为什么?
List<String> tList = new ArrayList<String>();
tList.add("4");
tList.add("5");
String tArray[] = (String[]) tList.toArray();
可能很多人会认为这段代码在做同样的事情,但事实并非如此。
Object tSObjectArray[] = new String[2];
String tStringArray[] = (String[]) tSObjectArray;
实际上,编写的代码正在做这样的事情。javadoc在说!它将实例化一个新的数组,它将是对象的形式!!!
Object tSObjectArray[] = new Object[2];
String tStringArray[] = (String[]) tSObjectArray;
所以tList.toArray实例化一个Objects而不是Strings ...
因此,此线程中没有提到的自然解决方案,但是Oracle建议的是以下内容
String tArray[] = tList.toArray(new String[0]);
希望它足够清楚。