我的时区下午好。
我有一个“简单”的问题。
我有一个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;
任何人都可以解释为什么会这样吗?
致以最诚挚的问候
答案 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()]);