首页 >Java >java教程 >从 lambda 表达式中引发异常

从 lambda 表达式中引发异常

Patricia Arquette
Patricia Arquette原创
2025-01-12 06:41:45311浏览

在 Lambda 中抛出异常

  • lambda 表达式可以引发异常。
  • 对于已检查的异常:
  • 抛出的异常必须与函数接口抽象方法的 throws 子句中列出的异常兼容。

检查异常的要求

  • 如果 lambda 抛出检查异常(例如 IOException):
  • 函数式接口的抽象方法必须在 throws 子句中包含相同的异常。
  • 如果没有这个子句,lambda 表达式将与该方法不兼容,并会导致编译错误。

示例:Lambda 中抛出异常
代码:

import java.io.*;

interface MyIOAction {
    boolean ioAction(Reader rdr) throws IOException;
}

class LambdaExceptionDemo {
    public static void main(String args[]) {
        // Esta lambda de bloco pode lançar uma IOException.
        // A cláusula throws deve estar presente em ioAction().
        MyIOAction myIO = (rdr) -> {
            int ch = rdr.read(); // Pode lançar IOException
            // Lógica adicional pode ser inserida aqui
            return true;
        };
    }
}

说明:
抛出子句:

  • MyIOAction 功能接口中的 ioAction(Reader rdr) 方法包含抛出 IOException。
  • 这允许与该方法关联的 lambda 使用可以抛出 IOException 的操作,例如 rdr.read()。

没有 throws 子句的错误:

  • 如果从 ioAction 中删除 throws IOException 子句,程序将无法编译。
  • 出现这种情况是因为 lambda 引发的异常 (IOException) 未在方法中处理或声明。

重要提示:

  • Lambda 和函数式接口之间的兼容性:
  • lambda 表达式必须与函数式接口的抽象方法兼容。
  • 对于受检异常,这种兼容性要求 lambda 抛出的异常在方法的 throws 子句中列出。

实际测试:
尝试从上面代码中的 ioAction 中删除 throws 子句。由于 lambda 和函数式接口方​​法不兼容,这将导致编译错误。

Lance uma exceção de dentro de uma expressão lambda

以上是从 lambda 表达式中引发异常的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn