为什么 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 被声明为抛出异常。你不知道异常的具体类型,但你必须处理一个。
我正在学习 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 被声明为抛出异常。你不知道异常的具体类型,但你必须处理一个。