为什么 Java Lambda 不能抛出已检查的异常

Why can't Java Lambda throw an checked exception

我正在学习 Java 并且有点困惑,为什么 Lambda 表达式不能抛出已检查的异常。有人对此有一个可以理解的解释吗?

我通读了这个post: Java 8 Lambda function that throws exception? 和这个: java throwing checked exceptions? 但两者都没有帮助我。我也看了很多关于google的文章,但他们都说不可能,但没有说为什么。

这几乎是一种方法。如果方法签名被声明为抛出检查异常,那么在lambda内部可以抛出检查异常。

想象一下,如果可以的话。

Runnable r = ()->{ throw new CheckedException();};

现在可以调用我们想象中的 runnable.run,但调用者将不知道它必须处理已检查的异常。

另一方面,Callable 会抛出异常。

Callable c = ()->{ throw new CheckedException();};

这很好用,因为 Callable.call 被声明为抛出异常。你不知道异常的具体类型,但你必须处理一个。