Warum werden OSGI -Bundleaktivatormethoden mit "Ausnahme ausgeworfen" deklariert?
Frage
Beide start
und stop
Methoden von OSGI Bundleaktivator werden deklariert mit throws Exception
. Gleichzeitig in seinem Buch Effektiv Java, zweite Ausgabe, Artikel 62, sagt Joshua Bloch
Deklarieren Sie niemals eine Methode "Ausnahme aus der Ausnahme"
Ist es also eine schlechte Designentscheidung in BundleActivator
Oder ist in diesem Fall eine solche Allgemeinheit gerechtfertigt und warum?
Lösung
Bitte beachten Sie, dass Sie Ihre deklarieren können start
und stop
Methoden ohne welche throws
Klausel. (Oder Sie können diese Methoden mit jedem deklarieren java.lang.Exception
Unterklassen.)
Andererseits zum Beispiel ein bestimmtes bestimmtes
void start(BundleContext context) throws BundleActivatorException
Die Methode würde sich nicht zu sehr ändern. Es würde nur Implementierer dazu gebracht, ihre Ausnahmen zu fangen und sie in a zu überdenken BundleActivatorException
. Da jede Ausnahme die Bündelaktivierung sinnlos macht try-catch
Block ist wirklich unnötig, daher ist es einfacher zu werfen java.lang.Exception
.
Andere Tipps
Eine Ausnahme von a start()
oder stop()
Die Methode zeigt an, dass etwas ernsthaft falsch ist und die Änderung des Bündellebenszyklus nicht durchlaufen sollte. Da wir die Bedenken, die Situation (durch das Bündel) zu erkennen und sie (durch das Gerüst) zu erfassen, trennen, werfen Exception
ist die einzig vernünftige Sache zu tun.
Ich betrachte Josh Blochs Rat anachronistisch. Es ist nichts falsch mit throws Exception
. Es gibt Ihnen die Möglichkeit, die von Ihnen gefallene Ausnahme auszulegen, und das OSGI -Framework wird damit umgehen.
Beachten Sie, dass Sie diese Methoden nie selbst aufrufen müssen.