当前位置: 首页 > 知识库问答 >
问题:

使用lambda表达式处理异常[duplicate]

贺景胜
2023-03-14

我对lambda表达有意见。我的代码:

public static void main(String[] args) {

    Function<String, String> lambda = path -> {
        String result = null;
        try {
            BufferedReader br = new BufferedReader(new FileReader(path));
            String line;
            while ((line = br.readLine()) != null) {
                result = result + line;
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return result;
    };
}
public static void main(String[] args) throws IOException {

    Function<String, String> lambda = path -> {
        String result = null;
        BufferedReader br = new BufferedReader(new FileReader(path));
        String line;
        while ((line = br.readLine()) != null) {
            result = result + line;
        }
        return result;
    };
}

有可能吗?我只能使用java.util.function。我尝试从“lambda”中删除try catch,而我“main”方法应该正在捕获异常。

共有1个答案

酆乐湛
2023-03-14

内置的function类不允许抛出未经检查的异常,您可以从apply()方法的签名中看到这一点。

但是,您可以轻松地定义允许抛出异常的@functionalinterface,例如:

@FunctionalInterface
public interface CheckedFunction<U,V> {
  public V apply(U u) throws Exception;
}

并将lambda变量改为checkedfunction

如果出于任何原因必须使用内置的函数,则另一种方法是将所有检查的异常转换为runtimeexception,例如:

Function<Foo,Bar> f = foo -> {
  try {
    return foo.methodThatCanThrow();
  } catch (RuntimeException e) {
    throw e;
  } catch (Exception e) {
    throw new RuntimeException(e);
  }
};

这将允许您的代码进行编译,但肯定不是一般推荐的最佳实践。

 类似资料:
  • 我有metohod myservice#create,它抛出CustomException。我在可选#map中调用此方法,如下所示: 当我用引起异常的参数调用这个方法时,就会捕获CustomException,但结果是操作成功,状态为200。如何在lambda中处理此异常并返回异常消息?

  • 既然我有一个带有两个方法的,那么我如何用一个具体的类实现它呢?如何为这两种方法编写Lambda表达式?

  • 问题内容: 我如何写一个等于的lambda表达式: 不允许以下内容: 问题答案: 皮肤化Python的方法不止一种: Lambda接受语句。既然是一条语句,您可以编写一个通用的提升器: 但是,如果您的目标是避免使用,则显然不能削减它。但是,它确实允许您有条件地引发异常,例如: 另外,您可以在不定义命名函数的情况下引发异常。您所需要的只是强健的腹部(给定的代码是2.x): 和python3 强健胃部

  • 让我们考虑一个类,它只包含一个属性。我创建了6个父类对象,属性值为。 在这两种情况下,我都得到一个。 这个怎么处理?

  • 主要内容:作为参数使用Lambda表达式,访问变量,方法引用在《 Java Lambda表达式》和《 Java Lambda表达式的3种简写方式》一节中我们了解了 Java Lambda 的概念并可以在匿名类的场合使用 Lambda 语法进行简单替换。本节主要介绍在 Java 中如何使用 Lambda 表达式。 作为参数使用Lambda表达式 Lambda 表达式一种常见的用途就是作为参数传递给方法,这需要声明参数的类型声明为函数式接口类型。示例代码如下:

  • 我正在使用Java8中引入的Stream API,为列表中的每个字符串运行一个方法。 如您所见,方法签名状态为抛出所有IOExceptions,流中的writeToString方法可能抛出IOException。但是,Java编译器给了我一个错误,指出流线上有一个未处理的IOException。 为什么流中的异常不会像方法中的其他异常一样被抛出?有没有什么方法可以在不在forEach lambda