2012-05-25 15 views
7

Ich habe eine Klasse angetroffen, die Ausnahme erweitert: da es nicht sinnlos extening Ausnahme sind die Super-Klasse Exception nur Aufruf alle der überwiegenden Konstrukteurs diese Weise Warum Exception Klasse?

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); 
    } 


} 

?

+0

mögliche Duplikate von [Subclassing Exception in Java: Wann ist keine benutzerdefinierte Nachricht "gut genug"?] (Http://stackoverflow.com/questions/9366425/subclassing-exception -in-java-wann-ist-nicht-eine-benutzerdefinierte-Nachricht-gut genug) –

Antwort

8

Nein, es ist nicht sinnlos. Sie können catch die spezifische Ausnahme auf diese Weise und behandeln Sie es speziell, anstatt dann eine allgemeine Exception fangen, die nicht in allen Fällen behandelt werden kann.

Mit diesem können Sie tun:

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

was nicht möglich ist, wenn Sie nicht wissen, wie eine allgemeine Exception zu handhaben, aber Sie können MyException besser in den Griff.

Es verbessert auch die Lesbarkeit - es ist besser, eine Methode als throws MyException (mit besser Namen in der Regel) dann throws Exception zu deklarieren - Sie wissen, was schief gehen kann viel besser so.

5

Ja, es gibt einen Grund. Es ermöglicht Ihnen, den Typ Ihrer Ausnahmen zu unterscheiden.

Angenommen diesen folgenden Code:

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 
} 

Ereignis, wenn die MyFirstException und MySecondException vererben Ausnahme und alle Methoden außer Kraft setzen, können Sie sie in den Fangblöcke unterscheiden kann. Sie können also für beide Ausnahmen unterschiedliche Handler haben.

0

Wenn Sie immer eine catch (Exception e) tun würden Sie tatsächlich jede Unterklasse von Exception fangen, dies gilt speziell auch für RuntimeException s, die Sie normalerweise nicht fangen wollen. Dies kann nur verschlimmert werden, indem Throwable

Verwandte Themen