我正在学习 Java,有点困惑,为什么 Lambda 表达式不能抛出检查异常。有人对此有一个可以理解的解释吗?
我通读了这篇文章: 引发异常的 Java 8 Lambda 函数? 还有这个: java抛出检查异常? 但两者都没有帮助我。我也在谷歌上阅读了多篇文章,但他们都说不可能,但不是为什么。
我正在学习 Java,有点困惑,为什么 Lambda 表达式不能抛出检查异常。有人对此有一个可以理解的解释吗?
我通读了这篇文章: 引发异常的 Java 8 Lambda 函数? 还有这个: java抛出检查异常? 但两者都没有帮助我。我也在谷歌上阅读了多篇文章,但他们都说不可能,但不是为什么。
这几乎是一种方法。如果方法签名被声明为抛出已检查异常,则可以在 lambda 内部抛出已检查异常。
想象一下,如果可以的话。
Runnable r = ()->{ throw new CheckedException();};
现在可以调用我们想象中的 runnable.run,但调用者不会知道它必须处理已检查的异常。
另一方面,Callable 确实会引发异常。
Callable c = ()->{ throw new CheckedException();};
这很好用,因为 Callable.call 被声明为抛出异常。你不知道异常的具体类型,但你必须处理一个。