0

私のタイムゾーンでこんにちは。

「簡単な」質問があります。

ArrayList がありますが、 ArrayList オブジェクトからメソッド toArray を使用してこの ArrayList を配列に変換し、それを Message[] にキャストすると、 java.lang.ClassCastException がスローされますか? Message クラスは、パッケージ「javax.mail.Message」に属します。コードのスニペット:

 List<Message> messageList = new ArrayList<Message>();
    --code to fullfill the List
   (Message[]) messageList.toArray();

スローと例外: スレッド「メイン」での例外 java.lang.ClassCastException: [Ljava.lang.Object; [Ljavax.mail.Message; にキャストできません。

なぜこれが起こるのか誰でも説明できますか?

どうぞよろしくお願いします

4

3 に答える 3

2

は(場合によっては)Objectキャストされる可能性がありMessageますが、あなたの場合のように、すべてのオブジェクトがメッセージであっても、オブジェクトの配列をメッセージの配列にキャストすることはできません。

ArrayList<Object>これは、にキャストできないという事実と似ています(ただし同じではありません)ArrayList<Message>

方法を考えてみましょうtoArray(T[])

于 2011-09-12T13:22:26.480 に答える
1

の配列を作成しMessageてから、それをtoArray()に渡す必要があります。呼び出しているメソッドはの配列を返すObjectため、クラスキャスト例外が返されます。2番目のオブジェクトが最初のオブジェクトを拡張している場合でも、あるオブジェクトタイプの配列を別のオブジェクトタイプの配列にキャストすることはできません。

Message[] messages = new Message[messageList.size()];
messageList.toArray(messages);

こちらのドキュメントを確認してください

于 2011-09-12T13:21:01.693 に答える
0

このメソッドは、キャストできないtoArray()型の配列を作成します。正しいタイプの配列を作成するには、使用するタイプをメソッドObject[]に指示する必要があります。toArray()

(Message[]) messageList.toArray(new Message[messageList.size()]);
于 2011-09-12T13:20:12.447 に答える