当前位置: 首页 > 面试题库 >

Lambda引发异常

史磊
2023-03-14
问题内容

鉴于此Java 8代码

public Server send(String message) {
    sessions.parallelStream()
        .map(Session::getBasicRemote)
        .forEach(basic -> {
          try {
            basic.sendText(message);
          } catch (IOException e) {
            e.printStackTrace();
          }
        });

    return this;
}

我们如何正确地将IOException其委派给方法调用的堆栈?(简而言之,如何使此方法抛出此错误IOException?)

Java中的Lambda看起来对错误处理不是很友好…


问题答案:

我的方法是从lambda 偷偷地
将其抛出,但是要小心,使该send方法在其throws子句中声明它。使用我在这里发布的Exceptional课程:

public Server send(String message) throws IOException {
  sessions.parallelStream()
          .map(Session::getBasicRemote)
          .forEach(basic -> Exceptional.from(() -> basic.sendText(message)).get());
  return this;
}

这样,您可以有效地使编译器仅“移开视线”,从而在代码中的某个位置禁用其异常检查,但是通过在send方法中声明异常,可以恢复其所有调用程序的常规行为。



 类似资料:
  • 给定Java8代码 java中的Lambdas看起来对错误处理不太友好...

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

  • 问题内容: 您能解释一下为什么必须从lambda表达式中捕获已检查的异常吗?换句话说,为什么以下代码无法编译… 但是这个会吗? 似乎被调用方现在必须处理引发的所有已检查异常,而不是调用方。 问题答案: 问题不是lambda表达式,而是它正在实现的接口。请记住,lambda表达式基本上只是实现给定接口的匿名类的简写。 在这种情况下,请输入: 注意,没有声明抛出任何东西。这意味着它的任何实现都不能抛出

  • 你可以使用raise语句 引发 异常。你还得指明错误/异常的名称和伴随异常 触发的 异常对象。你可以引发的错误或异常应该分别是一个Error或Exception类的直接或间接导出类。 如何引发异常 例13.2 如何引发异常 #!/usr/bin/python # Filename: raising.py classShortInputException(Exception):     '''A u

  • 我使用正则表达式来查找一个字符串是否存在于一个书页中。下面是相同的代码。 观察: > 案例1:当searchText=“(222M)”时 结果:找到字符串。 案例2:当search chText="(222M"//缺少括号时 我得到以下例外。 索引22:.\b.{0}(1110r.{附近regexp模式中嵌套的括号不正确。{0}.\b 还有更好的在页面中查找字符串的选项。使用String.cont

  • 下面有一些代码,我试图在其中使用以字符串形式打印所有匹配项。 上面的代码在线程“main”java.lang.IndexOutOfBoundsException中抛出异常:没有第2组异常。