2

OSGI BundleActivatorstart的和方法都用. 同时,Joshua Bloch 在他的《Effective Java, Second Edition, Item 62》一书中说stopthrows Exception

永远不要声明一个方法“抛出异常”

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

4

3 回答 3

2

请注意,您可以在没有任何子句的情况下声明您的startand方法。(或者您可以使用任何子类声明这些方法。)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

我认为 Josh Bloch 的建议不合时宜。没有错throws Exception。它使您可以选择抛出您喜欢的任何异常,并且 OSGi 框架将处理它。

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

于 2012-02-17T10:29:11.240 回答