2016-05-04 12 views
7

Ich habe kürzlich festgestellt, dass Exception mehrere Konstruktoren hat, die Throwable als Parameter nehmen. Throwable hat zwei Unterklassen, Error und Exception, und die gesamte Dokumentation gibt im Allgemeinen an, dass Sie nicht versuchen sollten, eine Error zu fangen oder zu behandeln. Daher bin ich neugierig, warum Exception eine Throwable als Konstruktor Parameter anstelle von Exception nimmt. Dies bedeutet, dass ein Exception mit einer Error als Ursache erstellt werden könnte und von der Anwendung verarbeitet werden könnte. Warum ist das der Fall?Warum nimmt Exception Throwable als Konstruktorparameter anstelle von Exception?

Sollten benutzerdefinierte Exception Klassen dann nur Konstruktoren zur Verfügung stellen, die Exception als Parameter annehmen?

+0

Nur raten: vielleicht versuchen die Leute manchmal, Ausnahmen irgendwie zu protokollieren; und vielleicht ist das einfacher, wenn Sie einige Ihrer eigenen benutzerdefinierten Ausnahmen verwenden; und du lässt zu, dass solche Dinge um einen Throwable gewickelt werden. Oder vielleicht, die Sprache papas und mamas haben einfach nicht gedacht, dass man durch. – GhostCat

+0

JAVADoc syas: * "Ein Fehler ist eine Unterklasse von Throwable, die auf ernsthafte Probleme hinweist, die eine sinnvolle Anwendung nicht zu beheben versuchen sollte. Die meisten dieser Fehler sind abnormale Bedingungen." * Aber es verbietet Ihnen nicht, sie zu fangen. – user2004685

Antwort

3

Ich denke, es ist im Grunde, weil:

  1. es keine Error zu behandeln empfohlen, aber es ist nicht verboten.

  2. Es ist eine gute Übung, die Schnittstelle trotzdem zu programmieren, daher sollte der Parametertyp die meisten Typen unterstützen, indem er als Root-Schnittstelle Throwable verwendet wird.

2

IMHO, nimmt Exception Klassen Throwable als Parameter, da einige Bibliotheken oder APIs könnten ihre eigene Art erstellen, müssen Throwable, und dann Exception Handler erstreckt sich auch mit denjenigen umgehen können.

Auch Sie können throw eine Throwable nicht unbedingt eine Ausnahme, Dies macht es sehr einfach zu etwas werfen, das eine benutzerdefinierte Art von Programmfehler ist, und basierend darauf wird es seine Ebene der "Wiederherstellbarkeit" haben.

Für Ihre benutzerdefinierten Exception-Klassen, ich denke, es hängt von der Granularität, die Sie bei der Behandlung von Ausnahmen benötigen, würden am häufigsten Throwable s behandelt, weil Sie möglicherweise nicht von einem Fehler wiederherstellen können, aber Sie noch Benutzer benachrichtigen dass es passiert ist.