2012-05-25 24 views
7

ho incontrato una classe che estende Exception:Perché estendere la classe Exception?

public class MyException extends Exception 
{ 
    public MyException() 
    { 
     super(); 
    } 

    public MyException(final String argMessage, final Throwable argCause) 
    { 
     super(argMessage, argCause); 
    } 

    public MyException(final String argMessage) 
    { 
     super(argMessage); 
    } 

    public MyException(final Throwable argCause) 
    { 
     super(argCause); 
    } 


} 

Non è un'eccezione extening inutile in questo modo dal momento che tutti i costruttori di primaria importanza sono solo chiamando la super classe Exception?

+0

possibile duplicato di [Eccezione di sottoclassi in Java: quando non è un messaggio personalizzato "abbastanza buono"?] (Http://stackoverflow.com/questions/9366425/subclassing-exception -in-java-quando-isnt-a-custom-message-buon-abbastanza) –

risposta

8

No, non è inutile. Puoi catch l'eccezione specifica in questo modo e gestirla in modo specifico, piuttosto che prendere un generale Exception, che potrebbe non essere gestito in tutti i casi.

Con questo, si può fare:

try { 
    foo(); 
} catch (MyException e) { 
    handleMyException(e); 
} 

Il che non è possibile se non si sa come gestire un generale Exception, ma è possibile gestire MyException meglio.

Migliora anche la leggibilità: è preferibile dichiarare un metodo come throws MyException (con un nome migliore di solito) quindi throws Exception - si sa cosa può andare storto molto meglio in questo modo.

5

Sì, c'è un motivo. Ti permette di differenziare il tipo delle tue eccezioni.

Suppongo che questo codice seguente:

try { 
    // some instructions 
} catch (MyFirstException firstException) { 
    // Handler for the first exception 
} catch (MySecondException secondException) { 
    // Handler for the first exception 
} catch (Exception exception) { 
    // Handler for all other exceptions 
} 

evento se la MyFirstException e MySecondException ereditano da Exception e sovrascrivere tutti i metodi, è possibile distinguere nei blocchi catch. Quindi, puoi avere gestori diversi per entrambe le eccezioni.

0

quando si dovrebbe sempre fare un catch (Exception e) si sarebbe effettivamente catturare ogni sottoclasse di Exception, questo si applica in particolare anche a RuntimeException s che di solito non si vuole prendere. Questo può essere aggravato solo catturando Throwable

Problemi correlati