Приведение к массиву сообщений - PullRequest
0 голосов
/ 12 сентября 2011

Добрый день в моем часовом поясе.

У меня "простой" вопрос.

У меня есть ArrayList, но когда я преобразую этот ArrayList в массив, используя метод toArray из объекта ArrayListи приведите его к сообщению [], он генерирует исключение 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 ]

2 голосов
/ 12 сентября 2011

Хотя Object может быть приведено к Message (иногда), вы не можете преобразовать массив объектов в массив сообщений, даже если все объекты являются сообщениями, как в вашем случае.

Это похоже (но не то же самое) на тот факт, что вы не можете разыграть ArrayList<Object> на ArrayList<Message>.

Рассмотрим метод toArray(T[]).

1 голос
/ 12 сентября 2011

Вы должны создать массив Message и затем передать его toArray ().Метод , который вы вызываете , возвращает массив Object, следовательно, исключение classcast.Вы не можете привести массив одного типа объекта к массиву другого, даже если второй объект расширяет первый.

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

Проверьте документацию здесь

0 голосов
/ 12 сентября 2011

Метод toArray() создает массив типа Object[], который не может быть приведен. Чтобы создать массив с правильным типом, вы должны указать методу toArray(), какой тип использовать:

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