我上课看起来像这样

class Some {

    private enum Inner {
    }
}


我正在尝试在测试类的初始化块中找到Inner类。

class SomeTest {

    private static final Class<?> INNER_CLASS;

    {
        for (final Class<?> declaredClass: Some.class.getDeclaredClasses()) {
            if (declaredClass.getSimpleName().equals("Inner")) {
                INNER_CLASS = declaredClass;
                // Variable `INNER_CLASS` might be assigned in loop
                // break? return?
            }
        }
        throw new ExceptionInitializerError("failed to find Inner.class");
    }
}


编译器不喜欢这样,我找不到更好的方法。

我该如何解决?有什么好的模式吗?

最佳答案

staticinstance初始化块无法引发已检查的异常,因为无法声明这些块引发了这些异常。将ExceptionInitializerError更改为RuntimeException(或任何子类),然后将代码包装在try-catch

除了这里,您不会返回也不中断,因此您总是会抛出异常。

至于“爆发”好吧,不要。您必须编写该块,就像它是void方法的主体一样,但是有一个限制,即您不能在任何地方使用return

08-26 20:25