【问题标题】:Why OSGI BundleActivator methods are declared with "throws Exception"?为什么 OSGI BundleActivator 方法被声明为“抛出异常”?
【发布时间】:2012-03-07 21:17:27
【问题描述】:

OSGI BundleActivatorstartstop 方法都用throws Exception 声明。与此同时,Joshua Bloch 在他的《Effective Java, Second Edition, Item 62》一书中说

从不声明方法“抛出异常”

那么在BundleActivator 中这是一个糟糕的设计决策,或者在这种情况下这种概括是合理的,为什么?

【问题讨论】:

    标签: java exception osgi throws


    【解决方案1】:

    请注意,您可以在没有任何 throws 子句的情况下声明您的 startstop 方法。 (或者您可以使用任何java.lang.Exception 子类声明这些方法。)

    另一方面,具体的,例如

    void start(BundleContext context) throws BundleActivatorException
    

    方法不会改变太多。它只会让实现者捕获他们的异常并将其重新抛出包裹在BundleActivatorException 中。由于每个异常都会使包激活变得毫无意义,因此这个 try-catch 块确实是不必要的,因此抛出 java.lang.Exception 更容易。

    【讨论】:

      【解决方案2】:

      start()stop() 方法中抛出异常表明存在严重错误,并且不应进行捆绑生命周期更改。由于我们将检测情况(通过包)和处理(通过框架)的关注点分开,所以抛出Exception 是唯一合理的做法。

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-02-02
          • 1970-01-01
          • 2017-07-26
          • 2021-03-04
          • 1970-01-01
          相关资源
          最近更新 更多