Vantato a una serie di messaggi
-
29-10-2019 - |
Domanda
Buon pomeriggio nel mio fuso orario.
Ho una domanda "semplice".
Ho un ArrayList, ma quando trasformo questa ArrayList in Array usando il metodo Toray dall'oggetto ArrayList e lo lancio al messaggio [] lancia un java.lang.classcastException? La classe di messaggi appartiene al pacchetto "javax.mail.message" snippet di codice:
List<Message> messageList = new ArrayList<Message>();
--code to fullfill the List
(Message[]) messageList.toArray();
Lancia ed eccezione:Eccezione nel thread "Main" java.lang.classcastException: [ljava.lang.object; non può essere scelto su [ljavax.mail.message;
Qualcuno può spiegarmi perché questo accade?
Con i migliori saluti
Soluzione
Dovresti creare un array di Message
e poi passalo al toarray (). Il metodo Stai chiamando restituisce un array di Object
, da qui l'eccezione Classcast. Non è possibile lanciare un array di un tipo di oggetto a un array di un altro, anche se il secondo oggetto estende il primo.
Message[] messages = new Message[messageList.size()];
messageList.toArray(messages);
Controlla la documentazione qui
Altri suggerimenti
Sebbene un Object
può essere lanciato a Message
(A volte) non è possibile lanciare una matrice di oggetti alla serie di messaggi anche se tutti gli oggetti sono messaggi, come nel tuo caso.
Questo è simile (ma non lo stesso) al fatto che non puoi lanciare ArrayList<Object>
a ArrayList<Message>
.
Considera il toArray(T[])
metodo.
Il toArray()
Il metodo crea una matrice di tipo Object[]
che non può essere scelto. Per creare un array con il tipo corretto, devi dire il toArray()
Metodo quale tipo da usare:
(Message[]) messageList.toArray(new Message[messageList.size()]);