我有一个抛出已检查异常的方法:
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
。我可能会缺少什么?
答案 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));
}
};
}`