Ho due ClassLoaders che caricano la stessa classe. Quindi, ovviamente questi non possono essere scambiati l'uno con l'altro. Ma ho bisogno di accedere a un oggetto creato nell'altro ClassLoader.Soluzione per ClassCastException a causa del problema ClassLoader
Ho accesso a entrambi i ClassLoaders. Come posso usare quell'oggetto nell'altra classe? Non è necessario eseguire il cast dell'oggetto per farlo corrispondere al ClassLoader corrente.
Ma il problema è che il tipo dell'oggetto restituito è Object
. Quindi, devo abbattere quell'oggetto per accedere ad alcuni metodi. Come lo posso fare? Cast normale come le seguenti cause ClassCastException, che già conosco.
Mojo mojo = (Mojo) descriptor.getMojo();
descriptor#getMojo()
restituisce un oggetto di tipo Mojo
ma il metodo restituisce Object
. Come può fare questo?
Fatemi sapere se avete bisogno di ulteriori informazioni.
Ho letto tutte le teorie sul caricamento delle classi, ma nessuno ha specificato una soluzione adeguata per questo.
Nel vostro esempio, cosa succede se si fa: 'oggetto o = descriptor.getMojo(); System.out.println (o.getClass); 'con i due diversi classloader? – Bringer128
La domanda più importante qui sarebbe: cosa stai * effettivamente * cercando di ottenere qui? Si tratta di un esercizio accademico o esiste un vero caso d'uso a sostegno di questa situazione? –
@ Bringer128 Restituisce lo stesso pacchetto nome classe.Mojo. Stavo pensando se è possibile eseguire il suddetto casting tramite il metodo getClass() e #cast (Object o)? – ravana