2011-09-12 29 views
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;

任何人都可以解釋我爲什麼出現這種情況?

隨着問候

回答

1

您製作Message數組,然後把它傳遞給指定者()。方法you are calling確實會返回一個Object的數組,因此是classcast異常。即使第二個對象擴展了第一個對象,也不能將一個對象類型的數組轉換爲另一個對象的數組。

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

檢查文檔here

0

toArray()方法創建Object[]類型不能被鑄造的陣列。爲了創建正確類型的數組,你必須告訴toArray()方法要使用哪種類型:

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

雖然Object可強制轉換爲Message(有時),你可以不投對象的數組信息的列,即使所有的對象是信息,如你的情況。

這與您無法將ArrayList<Object>轉換爲ArrayList<Message>的事實相似(但不相同)。

考慮toArray(T[])方法。