Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2003
    Messaggi
    613

    [Java] Class Forname ed eccezioni classe istanziata

    Ciao a tutti,
    qualcuno sa dirmi come gestire le eccezioni generate dal costruttore di una classe istanziata tramite il Class.forName?


    codice:
    try{
        Distributor source = null;
        String className = "package1.distributori."+dst.getDistributorClass();
                        
        source  = (Distributor) Class.forName(className).getConstructor(String.class).newInstance(child.getPath());
    } catch (ClassNotFoundException ex) {
                        msgArea.append(ex.getCause()+"\n");
                    } catch (NoSuchMethodException ex){
                        msgArea.append(ex.getCause()+"\n");
                    } catch (InstantiationException ex) {
                        msgArea.append(ex.getCause()+"\n");
                    } catch (IllegalAccessException ex) {
                        msgArea.append(ex.getCause()+"\n");
                    } catch (IllegalArgumentException ex) {
                        msgArea.append(ex.getCause()+"\n");
                    } catch (InvocationTargetException ex) {
                        msgArea.append(ex.getCause()+"\n");
                    } catch (EccezioneDefinitaDaUtente ex){
    // Gestisci eccezione;
    }
    Il problema è che in EccezioneDefinitaDaUtente ho questo errore: exception package1.exception.EccezioneDefinitaDaUtente is never thrown in body of corresponding try statement.

    Suggerimenti?
    Conosci te stesso(?)
    (..e allora perchè scassi a me? )

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2003
    Messaggi
    613
    Grazie per lo spostamento, scusatemi, una svista.
    Conosci te stesso(?)
    (..e allora perchè scassi a me? )

  3. #3

    Re: [Java] Class Forname ed eccezioni classe istanziata

    Il problema è dato dal fatto che il metodo class.forName non può sollevare un tipo di eccezione "EccezioneDefinitaDaUtente", e come mai potrebbe farlo è una custom exception, ecco perchè il compilatore (furbo) ti avverte della cosa.
    Penso che quello che vorresti ottenere è qualcosa del genere
    codice:
    try{
        Distributor source = null;
        String className = "package1.distributori."+dst.getDistributorClass();
                        
        source  = (Distributor) Class.forName(className).getConstructor(String.class).newInstance(child.getPath());
    } catch (ClassNotFoundException ex) {
                        msgArea.append(ex.getCause()+"\n");
                        throw new EccezioneDefinitaDaUtente(...);
                    } catch (NoSuchMethodException ex){
                        msgArea.append(ex.getCause()+"\n");
                        throw new EccezioneDefinitaDaUtente(...);
                    } catch (InstantiationException ex) {
                        msgArea.append(ex.getCause()+"\n");
                        throw new EccezioneDefinitaDaUtente(...);
                    } catch (IllegalAccessException ex) {
                        msgArea.append(ex.getCause()+"\n");
                        throw new EccezioneDefinitaDaUtente(...);
                    } catch (IllegalArgumentException ex) {
                        msgArea.append(ex.getCause()+"\n");
                        throw new EccezioneDefinitaDaUtente(...);
                    } catch (InvocationTargetException ex) {
                        msgArea.append(ex.getCause()+"\n");
                        throw new EccezioneDefinitaDaUtente(...);
                    } 
    // Gestisci eccezione;
    }
    In maniere più sintetica puoi anche scriverlo cosi
    codice:
    try{
        Distributor source = null;
        String className = "package1.distributori."+dst.getDistributorClass();
                        
        source  = (Distributor) Class.forName(className).getConstructor(String.class).newInstance(child.getPath());
    } catch (Exception ex) {
                        msgArea.append(ex.getCause()+"\n");
                        throw new EccezioneDefinitaDaUtente(...);
                    } 
    // Gestisci eccezione;
    }
    Ciao

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2003
    Messaggi
    613
    Grazie mille, avevo temporaneamente risolto con il secondo metodo.
    Molto utile, grazie ancora.
    Conosci te stesso(?)
    (..e allora perchè scassi a me? )

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.