2012-02-16 11 views
2

OSGI BundleActivatorstartstopの両方のメソッドは、throws Exceptionと宣言されています。同時に、彼の本の効果的なJavaの第2版、項目62にジョシュア・ブロックはOSGI BundleActivatorのメソッドが "throws Exception"で宣言されるのはなぜですか?

を言う方法を宣言したことがないので、それが悪いデザインBundleActivatorの判断や、ある

「例外がスローされます」一般性はこの場合正当化され、なぜですか?

答えて

2

startstopメソッドは、throws句なしで宣言できます。 (それとも、任意のjava.lang.Exceptionのサブクラスでこれらのメソッドを宣言することができます。)

を一方、具体的な、例えば

void start(BundleContext context) throws BundleActivatorException 

方法はあまり変わりません。実装者に例外をキャッチし、BundleActivatorExceptionの中にラップし直すようにしました。すべての例外がバンドルのアクティブ化を無意味にするので、このtry-catchブロックは実際には不要なので、java.lang.Exceptionをスローするのは簡単です。

1

start()またはstop()メソッドから例外をスローすると、何かが深刻に間違っていることが示され、バンドルライフサイクルの変更は行われません。状況を(バンドルで)検出し、それを(フレームワークで)処理するという懸念を分離するので、Exceptionを投げることは唯一合理的なことです。

1

私はジョシュ・ブロッホのアドバイスが時代遅れであると考えます。 throws Exceptionには何も問題はありません。それはあなたが好きな例外をスローするオプションを与え、OSGiフレームワークがそれを処理します。

これらのメソッドを自分で呼び出す必要はありません。

関連する問題