2010-04-21 5 views

Antwort

26

Ich benutze dies als eine allgemeine Regel.

  • Wo es sinnvoll ist, verwenden Sie eine vordefinierte Java-Ausnahme. Zum Beispiel, wenn Ihr Code eine Art von E/A-Fehler hat, ist es in Ordnung, eine IOException zu werfen.
  • Verwenden Sie Ausnahmehierarchien nur, wenn Sie zwischen den beiden Ausnahmen in einem try/catch-Block unterscheiden müssen. Oft ist es völlig in Ordnung, wenn eine einzelne Komponente einen einzelnen Ausnahmetyp mit unterschiedlichen Nachrichten für verschiedene Fehler ausgibt. Wenn der Benutzer nicht wirklich alles tun kann, um den Fehler speziell zu behandeln, verwenden Sie dieselbe generische Ausnahmeklasse. Wenn der Benutzer sie anders handhaben kann, sollten Sie eine Hierarchie verwenden.
  • Bei Hierarchien sollten nicht alle Ausnahmen von verschiedenen Komponenten von einer Basisausnahme geerbt werden. Es gibt keinen wirklichen Grund, dies zu tun. Wenn der Verbraucher etwas fangen will, kann er einfach Exception fangen.
  • Für den Speicherort des Pakets habe ich eine Exception-Klasse mit dem zugehörigen Code angegeben. Wenn ich also einen BusinessService in einem Paket a.b.c habe, habe ich eine a.b.c.BusinessException, um damit zu arbeiten. Ich bin kein Fan davon, alle Ausnahmen in ein Exception-Paket zu setzen. Es macht es nur schwer zu finden.
2

Die Sprache legt keine Anforderungen fest, für welche Pakete benutzerdefinierte Klassen Exception eingefügt werden sollten. Solange die Klasse java.lang.Throwable erweitert, kann es ausgelöst werden.

+3

Ich denke, dass der Fragesteller ist sich dessen bewusst. Seine Frage bezieht sich eher auf Best Practices. – Sergio

4

Sie können Ihre Exception-Klassen erstellen, wo immer Sie möchten.

Wichtig ist, eine vorhandene Exception-Klasse zu erweitern (java.lang.Throwable in der Tat). Zum Beispiel java.lang.Exception oder java.lang.RuntimeException. Die erste ist eine geprüfte Ausnahme, während das Erweitern von RuntimeException zu einer ungeprüften Ausnahme führt; die Unterschiede zwischen den beiden sind detailliert here.

11

Ich habe alle meine benutzerdefinierten Ausnahmen in ein com.company.project.exception Paket. Ich mache das eher, als sie den Orten, an denen sie entstehen, "nahe" zu bringen.

Hier ist mein Argument: Wenn eine bestimmte Ausnahme nur innerhalb einer oder zwei Serviceklassen auftritt, ist es möglicherweise keine allgemein genug Ausnahme, um eine eigene Klasse zu verdienen. Nur wenn ich sehe, dass ein gemeinsames Thema an mehreren Stellen auftaucht, kann ich eine benutzerdefinierte Exception-Klasse erstellen. Und wenn es an mehreren Stellen auftaucht, dann gibt es kein logisches Paket zum "Anhängen", so dass ein ausnahmespezifisches Paket der richtige Weg zu sein scheint.

Verwandte Themen