在Java Lambda表达式中使用异常时应遵循的规则是什么?
该lambda表达式不能自行执行。它用于实现在功能接口中声明的方法。为了在lambda表达式中使用异常处理机制,我们需要遵循一些规则。
Lambda表达规则
lambda表达式不能抛出任何checked异常,直到其相应的FunctionalinterfaCE声明一个抛出子句。
由任何lambda表达式引发的异常可以与在其功能接口的throws子句中声明的异常具有相同类型或子类型。
示例1
interface ThrowException { void throwing(String message); } public class LambdaExceptionTest1 { public static void main(String[] args) { ThrowException te = msg -> { // lambda expression throw new RuntimeException(msg); // RuntimeException is not a checked exception }; te.throwing("Lambda Expression"); } }
输出结果
Exception in thread "main" java.lang.RuntimeException: Lambda Expression at LambdaExceptionTest1.lambda$main$0(LambdaExceptionTest1.java:8) at LambdaExceptionTest1.main(LambdaExceptionTest1.java:10)
示例2
import java.io.*; interface ThrowException { void throwing(String message) throws IOException; } public class LambdaExceptionTest2 { public static void main(String[] args) throws Exception { ThrowException te = msg -> { // lambda expression throw new FileNotFoundException(msg); // FileNotFoundException is a sub-type of IOException }; te.throwing("Lambda Expression"); } }
输出结果
Exception in thread "main" java.io.FileNotFoundException: Lambda Expression at LambdaExceptionTest2.lambda$main$0(LambdaExceptionTest2.java:9) at LambdaExceptionTest2.main(LambdaExceptionTest2.java:11)