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

如何在lambda表达式中重新抛出异常?[副本]

景阳平
2023-03-14

如何在Lambda中处理和重新抛出异常?当我试图用try/catch块包围调用时,它只是在lambda表达式中捕获它。我在方法签名中有ServiceException,所以我只想重新抛出它。是可能还是我漏掉了什么?

 BiFunction<Account, LocalDate, AccountBalance> getBalance;

 getBalance = (account, date1) -> balanceProvider.getBalance(account, date1); //balanceProvider.getBalance unhandled ServiceException

共有1个答案

云韬
2023-03-14

我过去常常捕获检查过的异常并重新抛出未检查的异常。类似于:

IntStream.range(1,3).forEach(i -> {
        try {
            TimeUnit.SECONDS.sleep(10);
        } catch (InterruptedException e) {
            throw new RuntimeException("InterruptedException was caught");
        }
    });

或者在你的情况下:

getBalance = (account, date1) -> {
    try {
        balanceProvider.getBalance(account, date1)
    } catch (ServiceException e) {
        throw new ServiceRTException("blabla");
    }
};
 类似资料:
  • 我怎样才能用Java8做到这一点呢?

  • 我试图在lambda内部抛出一个异常,但它总是给我一个错误,表示未处理的IOException。 有人能告诉我我做错了什么吗?

  • @apiResponse似乎也没有更正响应类型。 如本问题所述,如何在swagger Codegen中处理多个响应/返回类型(204为空,400为非空等)? 我可以这样扔 但是有没有更好的方法来做到这一点呢?我只想将.getResponseBody()作为对象而不是字符串返回。 非常感谢。

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

  • 问题内容: 我有一个关于Java中重新引发异常的非常简单的问题。 这是代码片段: 为什么我们需要在第一个版本中重新抛出,而第二个版本看起来更优雅?可能有什么好处,并且优先选择哪个版本? 问题答案: 你是对的。第二版更好。而且,第一个版本没有任何意义。除了异常的堆栈跟踪为“错误”之外,它的功能相同。 有“重新抛出”异常的原因如下: 如果您之前有事要做。 如果捕获一种类型的异常并抛出另一种类型的异常:

  • 我升级到Java 8,并试图用一个新的lamdba表达式替换通过映射的简单迭代。循环搜索空值,如果找到,则抛出异常。旧的Java 7代码如下所示: 我尝试将其转换为Java 8,如下所示: 有人能解释为什么这里不允许语句以及如何纠正这一点吗? Eclipse的快速修复建议在我看来不太对劲......它只是用块包围语句: