两个都 startstop OSGI的方法 捆绑活化器 被声明 throws Exception. 。同时,Joshua Bloch说,在他的书有效Java,第二版,第62项,说明

切勿声明方法“抛出异常”

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

有帮助吗?

解决方案

请注意,您可以声明您的 startstop 没有任何方法 throws 条款。 (或者您可以用任何 java.lang.Exception 子类。)

另一方面,例如

void start(BundleContext context) throws BundleActivatorException

方法不会改变太大。它只是让实施者捕获他们的例外,然后将其包裹在一个 BundleActivatorException. 。由于每个例外使束激活毫无意义 try-catch 块确实是不必要的,因此更容易投掷 java.lang.Exception.

其他提示

从一个例外 start() 或者 stop() 方法表明有严重的错误,捆绑生命周期的变化不应进行。由于我们将检测情况(通过捆绑包)分开,并(通过框架)进行处理,然后抛出 Exception 是唯一合理的事情。

我认为乔什·布洛赫(Josh Bloch)的建议过时。没有错 throws Exception. 。它为您提供了抛出您喜欢的任何例外的选项,并且OSGI框架将处理它。

请注意,您无需亲自调用这些方法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top