为什么 Runnable 的 run() 不能抛出检查的异常?

2022-09-02 05:35:49

根据JCIP第6.3.2节:

Runnable是一个相当有限的抽象;run 不能返回值或引发选中的异常。

run()不能返回值,因为它的返回类型是void,但为什么它不能引发一个检查的异常?


答案 1

它不能引发已检验的异常,因为它没有被声明为从第一个版本抛出已检验的异常,并且更改它太危险了。

最初只在包装中使用,并且假设开发人员希望捕获所有已检查的异常并处理它们,而不是将它们记录到。RunnableThreadSystem.err

Callable在您可以将单个任务添加到 可以捕获结果和引发的任何异常的 中时添加。ExecutorFuture

Callable现在允许您返回一个值并可选地声明一个选中的异常。

顺便说一句:你可以说你不想从可调用中返回或抛出一个已检查的异常,一种方法是使用类似的东西

Callable<Void> callable = new Callable<Void>() {
    public Void call() {
        // do something
        return null;
    }
};

答案 2

run() 不能引发已检查的异常,因为它未声明这样做。如果不声明已检查的异常,则无法引发这些异常。

也不能在重写或实现另一个不引发该异常的方法的方法上声明已检验的异常。因此,的实现不能简单地将子句添加到它们的实现中。Runnablethrowsrun()


推荐