异常处理时Java方法引用

时间:2018-03-15 16:45:00

标签: java java-8

我有一个抛出已检查异常的方法:

private void testCacheExpiration() throws InterruptedException

我正在尝试创建一个能够优雅地处理异常的通用包装器。

private Runnable handleNonTestException(Runnable r) {
    return () -> {
        try {
            r.run();
        } catch (Exception e) {
            logger.error(NON_TEST_EXCEPTION_MSG, e);
            errors.add(new Error(e.getMessage(), NON_TEST_EXCEPTION_MSG));
        }
    };
}

现在我正在使用handleNonTestException(this::testCacheExpiration),这给了我编译时错误unhandled exception type: InterruptedException。我可能会缺少什么?

1 个答案:

答案 0 :(得分:0)

我的testCacheExpiration方法签名不符合runnable界面中run方法的签名(不会抛出任何异常)

以下更改解决了它:

@FunctionalInterface
private interface ThrowingRunnable <E extends Exception> {
    void run() throws Exception;
}

private Runnable handleNonTestException(ThrowingRunnable<? extends Exception> r) {
    return () -> {
        try {
            r.run();
        } catch (Exception e) {
            logger.error(NON_TEST_EXCEPTION_MSG, e);
            errors.add(new Error(e.getMessage(), NON_TEST_EXCEPTION_MSG));
        }
    };
}`