gpt4 book ai didi

java - 在 CompletableFuture 的函数中抛出原始(内部)异常?

转载 作者:行者123 更新时间:2023-11-29 06:27:04 24 4
gpt4 key购买 nike

我是 Java 的新手,所以我希望这不是微不足道的,但我真的找不到我要找的东西。

我有一个抛出异常的函数:

public String foo(String s) throws MyException {
if ("a".equals(s)){
return s;
} else {
throw new MyException("Oh no!");
}
}

当 MyException 只是:

class MyException extends Exception{

String str1;

MyException(String str2) {
str1=str2;
}
public String toString(){
return ("MyException Occurred: "+str1) ;
}
}

现在我有另一个在 CompletableFuture 中调用 foo 的方法:

private CompletableFuture<String> test() throws Exception{
return CompletableFuture.supplyAsync(() -> foo("b"));
}

但是 foo 抛出异常,所以这里存在编译错误,因为对 foo 的调用是未处理的异常。

我只想抛出原始(内部)异常。我该怎么做?

最佳答案

您有两个问题。

  1. 您不能在 lambda 表达式中抛出已检查的异常,参见例如this answer .要处理此问题,您可以在 lambda 表达式中使用 catch block 或使用运行时异常。

  2. supplyAsync(() -> foo("b")) 意味着它将在稍后的某个时刻在另一个线程中异步运行,例如当您对结果调用 .get() 时。所以 test() 方法抛出异常是没有意义的。

关于java - 在 CompletableFuture 的函数中抛出原始(内部)异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52748800/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com