2012-04-02 4 views
3

これは私のクラスキャスト例外を与えるんなぜ私はこのなぜキャストに失敗していますか?

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

最終的に配列が必要な場合はなぜarraylistを使用しますか?配列から始め、要素を – Baz1nga

答えて

7

よりよいこの他methodを試してみてください。

String[] stringArray = stringList.toArray(new String[stringList.size()]); 

配列が返されるようにして、あなたが必要な正確なタイプ、何のキャストは必要ありませんのです。 methodが呼び出された場合は、ではなくObject[]が返され、実行しようとしているキャストが無効です。 .toArray()はあなたがString[]にダウンキャストすることはできませんタイプObject[]の配列を返しますので、あなたのコードが失敗した理由を

+1

に追加し、 'new String [stringList.size()]'を使うのが良いでしょう。 –

+0

@ Eng.Fouad OK、あなたの提案で編集しました。 –

9

理由があります。それを修正するには、他のtoArray(T[] a)すなわち

stringList.toArray(new String[0]);

+1

+1私よりはるかに良い説明 –

2

を使用するあなたは、文字列配列にキャストすることはできません。あなたがしたい:

String [] test = stringList.toArray(new String [stringList.size()]);

3

ListクラスのtoArray()方法はObject[]ないString[]を返し、あなたはString[]Object[]からキャストすることはできませんので。しかし、それを行うための正しい方法は次のとおりです。

String[] array = new String[stringList.size()]; 
stringList.toArray(array); 

か:

String[] array = stringList.toArray(new String[stringList.size()); 
2

ArrayList<T>.toArray()方法それが行うには完全に受け入れものであることから、タイプObjectの配列を返します。実際、タイプ消去のために、それはそれができる唯一のものです。

Stringの配列を取得する場合は、ArrayList<T>.toArray(T[])メソッドを呼び出します。あなたのケースでは、このようにそれを呼び出します。

stringList.toArray(new String[3]); 

提供String配列にArrayList内容を詰めるだろうそのようにそれを呼び出します。

関連する問題