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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top