OSGI BundleActivatorstart
的和方法都用. 同时,Joshua Bloch 在他的《Effective Java, Second Edition, Item 62》一书中说stop
throws Exception
永远不要声明一个方法“抛出异常”
那么BundleActivator
在这种情况下,这是一个糟糕的设计决策还是这种普遍性是合理的,为什么?
OSGI BundleActivatorstart
的和方法都用. 同时,Joshua Bloch 在他的《Effective Java, Second Edition, Item 62》一书中说stop
throws Exception
永远不要声明一个方法“抛出异常”
那么BundleActivator
在这种情况下,这是一个糟糕的设计决策还是这种普遍性是合理的,为什么?
请注意,您可以在没有任何子句的情况下声明您的start
and方法。(或者您可以使用任何子类声明这些方法。)stop
throws
java.lang.Exception
另一方面,特定的,例如
void start(BundleContext context) throws BundleActivatorException
方法不会改变太多。它只会让实现者捕获他们的异常并将其重新抛出并包裹在一个BundleActivatorException
. 由于每个异常都使捆绑激活毫无意义,因此该try-catch
块确实是不必要的,因此更容易抛出java.lang.Exception
.
start()
从or方法中抛出异常stop()
表明存在严重错误,并且不应进行捆绑生命周期更改。由于我们将检测情况(通过包)和处理(通过框架)的关注点分开,所以抛出Exception
是唯一合理的事情。
我认为 Josh Bloch 的建议不合时宜。没有错throws Exception
。它使您可以选择抛出您喜欢的任何异常,并且 OSGi 框架将处理它。
请注意,您永远不需要自己调用这些方法。