在Java Lambda表达式中使用异常时应遵循的规则是什么?

lambda表达式不能自行执行。它用于实现在功能接口中声明的方法。为了在lambda表达式中使用异常处理机制,我们需要遵循一些规则。

Lambda表达规则

  • lambda表达式不能抛出任何checked异常,直到其相应的F unctional interfa CE声明一个抛出子句。

  • 由任何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)