なぜOSGI BundleActivatorメソッドが「スロー例外」と宣言されるのですか?
質問
両方 start
と stop
OSGIの方法 バンドレアアクティベーター で宣言されています throws Exception
. 。同時に彼の著書でExecumentJava、第2版、アイテム62、Joshua Blochが言う
メソッドを「例外スロー」と宣言しないでください
それで、それは貧弱なデザインの決定です BundleActivator
または、この場合、そのような一般性は正当化されますが、なぜですか?
解決
あなたはあなたを宣言することができることに注意してください start
と stop
何もない方法 throws
句。 (または、これらのメソッドを任意のもので宣言することができます java.lang.Exception
サブクラス。)
一方、例えば、特定の
void start(BundleContext context) throws BundleActivatorException
メソッドはあまり変化しません。それはちょうど彼らの例外をキャッチし、それを包み込みます BundleActivatorException
. 。すべての例外がバンドルのアクティベーションを無意味にするためです try-catch
ブロックは本当に不要なので、投げる方が簡単です java.lang.Exception
.
他のヒント
aから例外をスローします start()
また stop()
方法は、何かが非常に間違っていることを示し、バンドルライフサイクルの変更は通過しないでください。状況を検出するという懸念を(バンドルで)分離し、それを(フレームワークで)処理するため、投げるので Exception
唯一の合理的なことです。
ジョシュ・ブロッホのアドバイスは時代錯誤だと思います。何も悪いことはありません throws Exception
. 。それはあなたが好きな例外をスローするオプションを提供し、OSGIフレームワークはそれを処理します。
これらの方法を自分で呼び出す必要はないことに注意してください。