Eine Methode sollte nur dann throws
eine Ausnahme bilden, wenn sie angemessene Garantien für den Status des Objekts, alle an die Methode übergebenen Parameter und alle anderen Objekte, auf die die Methode einwirkt, geben kann. Beispielsweise kann eine Methode, die ein Element aus einer Sammlung abrufen soll, von dem der Aufrufer erwartet, dass es darin enthalten ist, throws
eine aktivierte Ausnahme darstellen, wenn das Element, von dem erwartet wurde, dass es in der Sammlung vorhanden ist, dies nicht tut. Ein Aufrufer, der diese Ausnahme abfängt, sollte erwarten, dass die Sammlung das betreffende Element nicht enthält.
Beachten Sie, dass Java zwar zulässt, dass geprüfte Ausnahmen durch eine Methode in die Luft sprudeln, die als Auslösen von Ausnahmen der entsprechenden Typen deklariert ist, diese Verwendung jedoch im Allgemeinen als Anti-Pattern betrachtet werden sollte. Stellen Sie sich zum Beispiel vor, dass eine Methode LookAtSky()
als aufrufend deklariert FullMoonException
ist und sie voraussichtlich auslösen wird, wenn der Mond voll ist. Stellen Sie sich weiter vor, dass LookAtSky()
Anrufe ExamineJupiter()
, die auch als deklariert werden throws FullMoonException
. Wenn a FullMoonException
von geworfen ExamineJupiter()
wurde und LookAtSky()
es nicht auffing und entweder damit umging oder es in einen anderen Ausnahmetyp einwickelte, LookAtSky
würde der aufgerufene Code annehmen, dass die Ausnahme darauf zurückzuführen ist, dass der Erdmond voll ist; es hätte keine Ahnung, dass einer von Jupiters Monden der Schuldige sein könnte.
Ausnahmen, die ein Aufrufer möglicherweise behandeln wird (einschließlich im Wesentlichen aller geprüften Ausnahmen), sollten nur dann durch eine Methode übertragen werden können, wenn die Ausnahme für den Aufrufer der Methode dasselbe bedeutet wie für die aufgerufene Methode. Wenn Code eine Methode aufruft, die als ausgelöste Ausnahme deklariert ist, der Aufrufer jedoch nicht erwartet, dass diese Ausnahme in der Praxis jemals ausgelöst wird (z. B. weil er glaubt, dass es sich um vorab validierte Methodenargumente handelt), sollte die geprüfte Ausnahme abgefangen und umbrochen werden in einem ungeprüften Ausnahmetyp. Wenn der Anrufer nicht erwartet, dass die Ausnahme ausgelöst wird, kann der Anrufer nicht erwarten, dass sie eine bestimmte Bedeutung hat.