なぜOSGI BundleActivatorメソッドが「スロー例外」と宣言されるのですか?

StackOverflow https://stackoverflow.com/questions/9311890

  •  26-10-2019
  •  | 
  •  

質問

両方 startstop OSGIの方法 バンドレアアクティベーター で宣言されています throws Exception. 。同時に彼の著書でExecumentJava、第2版、アイテム62、Joshua Blochが言う

メソッドを「例外スロー」と宣言しないでください

それで、それは貧弱なデザインの決定です BundleActivator または、この場合、そのような一般性は正当化されますが、なぜですか?

役に立ちましたか?

解決

あなたはあなたを宣言することができることに注意してください startstop 何もない方法 throws 句。 (または、これらのメソッドを任意のもので宣言することができます java.lang.Exception サブクラス。)

一方、例えば、特定の

void start(BundleContext context) throws BundleActivatorException

メソッドはあまり変化しません。それはちょうど彼らの例外をキャッチし、それを包み込みます BundleActivatorException. 。すべての例外がバンドルのアクティベーションを無意味にするためです try-catch ブロックは本当に不要なので、投げる方が簡単です java.lang.Exception.

他のヒント

aから例外をスローします start() また stop() 方法は、何かが非常に間違っていることを示し、バンドルライフサイクルの変更は通過しないでください。状況を検出するという懸念を(バンドルで)分離し、それを(フレームワークで)処理するため、投げるので Exception 唯一の合理的なことです。

ジョシュ・ブロッホのアドバイスは時代錯誤だと思います。何も悪いことはありません throws Exception. 。それはあなたが好きな例外をスローするオプションを提供し、OSGIフレームワークはそれを処理します。

これらの方法を自分で呼び出す必要はないことに注意してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top