来自Cay Horstmann的《不耐烦的 Java 8》一书:
您不是一直讨厌必须在 Runnable 中处理已检查的异常吗?编写一个方法
uncheck
来捕获所有已检查的异常并将它们转换为未检查的异常。例如,new Thread(uncheck( () -> { System.out.println("Zzz"); Thread.sleep(1000); })).start(); // Look, no catch (InterruptedException)!
提示:定义一个接口
RunnableEx
,其run
方法可能会抛出任何异常。然后实施public static Runnable uncheck(RunnableEx runner)
在 uncheck 函数中使用 lambda 表达式。
我为此编写了这样的代码:
public interface RunnableEx {
void run() throws Exception;
}
public class TestUncheck {
public static Runnable uncheck(RunnableEx r) {
return new Runnable() {
@Override
public void run() {
try {
r.run();
} catch (Exception e) {
}
}
};
}
public static void main(String[] args) {
new Thread(uncheck(
() -> {
System.out.println("Zzz");
Thread.sleep(1000);
}
)).start();
}
}
我是按照提示做的吗?有没有更好的方法来做到这一点?
还有另一个补充问题:
为什么你不能只使用
Callable<Void>
而不是RunnableEx?