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