转换为Message数组

时间:2011-09-12 13:15:59

标签: java casting arraylist classcastexception toarray

我的时区下午好。

我有一个“简单”的问题。

我有一个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();

抛出和异常: 线程“main”中的异常java.lang.ClassCastException:[Ljava.lang.Object;无法转换为[Ljavax.mail.Message;

任何人都可以解释为什么会这样吗?

致以最诚挚的问候

3 个答案:

答案 0 :(得分:2)

虽然可以将Object转换为Message(有时),但即使所有对象都是消息,也不能将对象数组转换为消息数组,如您的情况。

这与你无法将ArrayList<Object>强制转换为ArrayList<Message>这一事实类似(但不完全相同)。

考虑toArray(T[])方法。

答案 1 :(得分:1)

您应该创建一个Message数组,然后将其传递给toArray()。方法you are calling确实返回Object数组,因此返回了一个转发异常。您不能将一个对象类型的数组强制转换为另一个对象的数组,即使第二个对象扩展了第一个对象也是如此。

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

查看文档here

答案 2 :(得分:0)

toArray()方法创建一个无法转换的Object[]类型的数组。要创建具有正确类型的数组,您必须告诉toArray()方法使用哪种类型:

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