いくつかの解決策が提供されているが、原因は何もないことがわかります。与えられた応答から機能する「何か」を取得するためだけに、何が間違っていたかを知ることが重要であると思うので、これについて詳しく説明します。
まず、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.
それは重要に見えないかもしれませんが、あなたがそれを見るようにそれはそうです...それで、次の行は何が失敗しますか?リスト内のすべてのオブジェクトは文字列ですが、変換されません、なぜですか?
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は文字列ではなくオブジェクトをインスタンス化しています...
したがって、このスレッドでは言及されていない自然な解決策ですが、オラクルが推奨するのは次のとおりです
String tArray[] = tList.toArray(new String[0]);
それが十分に明確であることを願っています。