2011-09-12 7 views
0

良い午後私のタイムゾーンで。メッセージの配列にキャスト

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

私はArrayListを持っていますが、このArrayListをArrayListオブジェクトからtoArrayメソッドを使用して配列に変換し、Message []に​​キャストするとjava.lang.ClassCastExceptionがスローされますか?

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

例外例外:メッセージクラスは "javax.mail.Messageの" コードの スニペットパッケージに属するスレッドで 例外を "主" にjava.lang.ClassCastException:[Ljava.lang.Object ; [Ljavax.mail.Message;にキャストできません。

これはどうして私に説明できますか?よろしく

答えて

1

あなたがMessageの配列を作成し、その後でtoArray()に渡す必要があります。メソッドyou are callingObjectの配列を返します。したがって、クラスキャストの例外です。 2つ目のオブジェクトが最初に拡張されても、1つのオブジェクト型の配列を別のオブジェクト型の配列にキャストすることはできません。

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

Objectは、あなたの場合のように、すべてのオブジェクトがメッセージであっても、メッセージの配列へのオブジェクトの配列をキャストすることはできません(時々)Messageにキャストすることができるがドキュメントにhere

0

toArray()方法で

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

(Message[]) messageList.toArray(new Message[messageList.size()]); 
2

を確認してください。

これは、ArrayList<Object>ArrayList<Message>にキャストできないという点では同じですが、同じではありません。

toArray(T[])メソッドを検討してください。

関連する問題