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();

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

谁能解释一下为什么会这样?

致以最诚挚的问候

4

3 回答 3

2

尽管 anObject可能会被强制转换为Message(有时),但即使所有对象都是消息,您也无法将对象数组转换为消息数组,就像您的情况一样。

这与您不能ArrayList<Object>转换为ArrayList<Message>.

考虑toArray(T[])方法。

于 2011-09-12T13:22:26.480 回答
1

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

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 回答