为什么OSGI串联弹药法被“抛出异常”声明?
题
两个都 start
和 stop
OSGI的方法 捆绑活化器 被声明 throws Exception
. 。同时,Joshua Bloch说,在他的书有效Java,第二版,第62项,说明
切勿声明方法“抛出异常”
因此,这是一个糟糕的设计决定 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框架将处理它。
请注意,您无需亲自调用这些方法。
不隶属于 StackOverflow