Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di citrus
    Registrato dal
    Feb 2002
    Messaggi
    774

    reflection e ClassCastException

    Salve a tutti,
    ho bisogno di creare un oggetto factory che sia in grado di caricare dinamicamente a runtime delle classi.
    ho creato un file di properties dove associo ad una costante il nome della relativa classe da caricare.
    Tutte le classi che andrò ad istanziare estendono una superclasse "BatchProcess".
    Il problema è che quando istanzio l'oggetto il costruttore viene richiamato correttamente ma nel momento in cui faccio il casting mi solleva un eccezione.

    vi posto la funzione "incriminata"

    codice:
    	private static BatchProcess getIstance(String className) throws Exception{
    		FileInputStream in = new FileInputStream("batchFactory.properties");
    		Properties p = new Properties(System.getProperties());
    		p.load(in);
    		
    		String batchClassName=p.getProperty(className);
    		Class<BatchProcess> c = (Class<BatchProcess>)ClassLoader.getSystemClassLoader().loadClass(batchClassName);
    	    Constructor<BatchProcess> constr = c.getConstructor(new Class[] {String.class});
    	    BatchProcess batch = (BatchProcess)constr.newInstance(new Object[] {"prova"});
    	
    		return batch;
    	}
    qualcuno di voi sa dirmi il perchè di questo errore?
    come posso risolvere?

    e...
    altra domanda...
    se invece di castare sempre alla superclasse volessi fare ogni volta il casting alla classe specifica, come posso fare?

    grazie mille a chiunque mi sarà d'aiuto
    citrus

  2. #2
    Utente di HTML.it L'avatar di citrus
    Registrato dal
    Feb 2002
    Messaggi
    774
    signori domando scusa...
    errore risolto, (avevo dimenticato di estendere la classe BatchProcess :P)..

    rimane cmq l'altra domanda...
    è possibile fare anche un casting dinamico?

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: reflection e ClassCastException

    Originariamente inviato da citrus
    qualcuno di voi sa dirmi il perchè di questo errore?
    come posso risolvere?
    Basta semplicemente che usi

    cls = Class.forName (nome)

    per caricare la classe, poi usi isAssignableFrom

    BatchProcess.class.isAssignableFrom (cls)

    per testare se cls è una classe assegnabile a BatchProcess e poi fai il resto.

    Originariamente inviato da citrus
    altra domanda...
    se invece di castare sempre alla superclasse volessi fare ogni volta il casting alla classe specifica, come posso fare?
    Questo dovresti farlo fuori dal tuo metodo getIstance. Esso ritorna sicuramente un BatchProcess, quindi se vuoi fai un test di instanceof e fai il cast.
    Ma così non sfrutti il polimorfismo ....
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Utente di HTML.it L'avatar di citrus
    Registrato dal
    Feb 2002
    Messaggi
    774
    hai ragione, infatti credo che terrò la struttura che ho impostato finora...
    grazie mille

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.