没有异常处理的 Class.forName 调用的等价物

An equivalent for a Class.forName call without exception handling

我想知道方法 Class.forName(className) 上是否有 "a method-wrapper",如果已检查的 ClassNotFoundException 发生,它会抛出未经检查的异常。

我的问题是在 lambda 体内处理这些类型的异常。看起来太邋遢了:

definition -> {
    new Thread(() -> {
        try {
            context.getBean(Class.forName(definition.getBeanClassName()));
            ...
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }).start();
});

还是我必须自己写?

提前致谢。

首先,注意风格。如果一个 lambda 不止一个语句,你应该认真考虑让它成为一个独立的方法。从可重用性、可维护性和可调试性的角度来看,这确实很有帮助。

为了回答您的问题,不,核心 Java 的一部分不存在这样的包装器。编写自己的(在命名方法中)应该不会那么痛苦。

Spring 知道 org.springframework.util.ClassUtils.resolveClassName 方法,它与 Class.forName 等效,但如果找不到 class 则抛出 IllegalArgumentException