为什么OSGI BundleActivator方法被声明为“抛出异常”?

时间:2012-02-16 13:13:42

标签: java exception osgi throws

OSGI BundleActivatorstartstop方法均以throws Exception声明。 Joshua Bloch在他的着作“有效Java,第二版,第62项”中同时表示

  

永远不会声明方法“抛出异常”

这是BundleActivator中的一个糟糕的设计决定,还是这种普遍性在这种情况下是合理的,为什么?

3 个答案:

答案 0 :(得分:2)

请注意,您可以在没有任何start条款的情况下声明stopthrows方法。 (或者您可以使用任何java.lang.Exception子类声明这些方法。)

另一方面,具体,例如

void start(BundleContext context) throws BundleActivatorException

方法不会改变太多。它只会使实现者捕获它们的异常并重新抛出它包含在BundleActivatorException中。由于每个异常都会使bundle激活毫无意义,因此这个try-catch块实际上是不必要的,因此更容易抛出java.lang.Exception

答案 1 :(得分:1)

start()stop()方法抛出异常表示某些内容严重错误,并且捆绑生命周期更改不应通过。由于我们将检测情况(通过捆绑)和处理(通过框架)的问题分开,因此抛出Exception是唯一合理的事情。

答案 2 :(得分:1)

我认为Josh Bloch的建议不合时宜。 throws Exception没有错。它为您提供了抛出任何您喜欢的异常的选项,OSGi框架将处理它。

请注意,您自己永远不需要调用这些方法。