OSGI BundleActivator的start
和stop
方法均以throws Exception
声明。 Joshua Bloch在他的着作“有效Java,第二版,第62项”中同时表示
永远不会声明方法“抛出异常”
这是BundleActivator
中的一个糟糕的设计决定,还是这种普遍性在这种情况下是合理的,为什么?
答案 0 :(得分:2)
请注意,您可以在没有任何start
条款的情况下声明stop
和throws
方法。 (或者您可以使用任何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框架将处理它。
请注意,您自己永远不需要调用这些方法。