start
和stop
OSGI BundleActivator的方法用throws Exception
声明。在他的书有效的Java,第二版,第62项的同时,约书亚布洛赫说为什么OSGI BundleActivator方法是用“throws Exception”声明的?
从来没有一个方法声明“抛出异常”
因此,它是在BundleActivator
还是这么差的设计决策这种情况下的普遍性是合理的,为什么?
start
和stop
OSGI BundleActivator的方法用throws Exception
声明。在他的书有效的Java,第二版,第62项的同时,约书亚布洛赫说为什么OSGI BundleActivator方法是用“throws Exception”声明的?
从来没有一个方法声明“抛出异常”
因此,它是在BundleActivator
还是这么差的设计决策这种情况下的普遍性是合理的,为什么?
请注意,您可以声明您的start
和stop
方法,但不包含任何throws
子句。 (或者你可以声明这些方法与任何java.lang.Exception
子类)。
在另一方面,具体的,例如
void start(BundleContext context) throws BundleActivatorException
方法不会改变太多。它只是让执行者捕捉到他们的异常,并将其重新包装在BundleActivatorException
中。由于每个例外都会导致束激活毫无意义,因此try-catch
块实际上是不必要的,因此投掷java.lang.Exception
更容易。
从start()
或stop()
方法中抛出异常表明某件事情严重错误,并且捆绑包生命周期更改不应通过。由于我们将检测情况(通过捆绑)和处理(通过框架)分开,所以抛出Exception
是唯一合理的事情。
我认为Josh Bloch的建议不合时宜。 throws Exception
没有错。它给你选择抛出你喜欢的任何异常,并且OSGi框架将处理它。
请注意,您从不需要自己调用这些方法。