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

È stato utile?

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()]);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top