2

OSGIBundleActivatorstartのメソッドとstopメソッドの両方が。で宣言されています。同時に、彼の著書「Effective Java、Second Edition、Item 62」の中で、JoshuaBlochは次のように述べています。throws Exception

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

それでBundleActivator、この場合、それは不十分な設計決定であるか、またはそのような一般性が正当化されるのでしょうか、そしてなぜですか?

4

3 に答える 3

2

句なしstartでとメソッドを宣言できることに注意してください。(または、これらのメソッドを任意のサブクラスで宣言できます。)stopthrowsjava.lang.Exception

一方、特定の、例えば

void start(BundleContext context) throws BundleActivatorException

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

于 2012-02-16T14:04:35.747 に答える
1

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

于 2012-02-16T15:34:21.427 に答える
1

JoshBlochのアドバイスは時代錯誤だと思います。に問題はありませんthrows Exception。好きな例外をスローするオプションがあり、OSGiフレームワークがそれを処理します。

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

于 2012-02-17T10:29:11.240 に答える