由于找不到构造函数,无法实例化嵌套异常类



出于命名空间的原因,我想在类Foo内定义一个BarException。这是我的Foo课的样子:

package org.company.utils
class Foo {                                                                                                                               
    class BarException extends RuntimeException { }
    def raise() {                                                                                                                             
        def r = new RuntimeException("BOOM")                                                                                                    
        throw new BarException(r)
    }
}

这就是我希望它的工作方式:

  void testFoo() {
    shouldFail(Foo.BarException) {
      def foo = new Foo()
      foo.raise()
    }
  }

但测试失败,并显示:

1)测试Foo(测试。FooTestCase)java.lang.AssertionError: Closure 测试。FooTestCase$_testFoo_closure1@3eb25e1a 应该失败了,并带有 类型为 org.company.utils.Foo$BarException 的异常,而是得到 异常 groovy.lang.GroovyRuntimeException: 找不到匹配项 构造函数: org.company.utils.Foo$BarException(org.company.utils.Foo, java.lang.RuntimeException)

我尝试使用new BarException(this, r)实例化BarException,并将groovy.transform.InheritConstructors放在BarException周围,但对编译器没有任何用处。

怎么了?

尝试将 BarException 设为静态并添加 @InheritConstructors

import groovy.transform.InheritConstructors
class Foo {
    @InheritConstructors
    static class BarException extends Exception { }
    def raise() {
        Throwable r = new RuntimeException("BOOM")
        throw new BarException(r)
    }
}

来自时髦的文档:

静态内部类的使用是最好的支持。如果你 绝对需要一个内部类,你应该把它变成一个静态的。

相关内容

  • 没有找到相关文章

最新更新