Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    726

    [JAVA] Blocco Catch e operatore Instanceof

    Ciao a tutti,
    avrei bisogno del vostro aiuto per chiarirmi un dubbio sull'uso dell'operatore instanceof utilizzato all'interno dei blocchi catch.

    metodoA() lancia metodoB().
    Quest'ultimo a seconda dei parametri passati e di altri controlli potrebbe generare una eccezione (EccezioneUno, EccezioneDue, EccezioneTre...).
    In metodoB() per motivi di generalizzazione posso scrivere solo throws Exception.

    Il dubbio mio è:
    una volta che si è verificata una eccezione, sarà il metodoA a doversi occupare della sua gestione, ma dal momento che non so realmente di che tipo di eccezione si tratta come posso scrivere i vari blocchi catch?
    Dovrei usare l'operatore instanceof, ma come?

    codice:
    private void metodoA() {
     try {
      metodoB(/* serie di parametri */);
     }
    
     catch (/* Qui risiede il dubbio */) {
       // qui dovrei gestire EccezioneUno
     }
    
     catch (/* Qui risiede il dubbio */) {
       // qui dovrei gestire EccezioneDue
     }
    
     catch (/* Qui risiede il dubbio */) {
       // qui dovrei gestire EccezioneTre
     }
    
    }
    
    private void metodoB(/* parametri */) throws Excpetion {
     if (...) throw new EccezioneUno();
     if (...) throw new EccezioneDue(); 
     if (...) throw new EccezioneTre(); 
     .
     .
     .  
    }
    Spero di essermi spiegato bene.

    Grazie per il vostro aiuto!

  2. #2
    Utente di HTML.it L'avatar di oronze
    Registrato dal
    Jun 2001
    Messaggi
    3,543
    catch(EccezioneUno e){
    e.getMessage();
    }
    catch(EccezioneDue e){
    e.getMessage();
    }
    catch(EccezioneTre e){
    e.getMessage();
    }

    in java, nella gestione di eccezioni sarebbe opportuno partire dalla più specifica alla più generica poichè se viene sollevata EccezioneUno è quella che viene catturata (anche se viene lanciata anche EccezioneDue). Nel tuo caso sono tutte eccezioni di pari livello? in tal caso devi scegliere quale eccezione ti conviene catturare per prima
    cmq instanceOf funziona così
    Animale{}
    Gatto extends Animale{}
    Cane extends Animale{}
    Animale a = (Animale) recuperaUnAnimale();
    if(a instanceof Cane) a è un cane
    if(a instanceof Gatto) a è un cane

    No ai layout tabellari!

    Insulto libero: http://forum.html.it/forum/showthread.php?s=&postid=12524872#post12524872

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    726
    Ok, grazie!


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 © 2026 vBulletin Solutions, Inc. All rights reserved.