gpt4 book ai didi

java - 如何捕获Futures的自定义异常?

转载 作者:行者123 更新时间:2023-11-30 02:28:06 25 4
gpt4 key购买 nike

通常,当运行 Future 并等待结果时,我只能捕获 InterruptedException |执行异常

但是如果任务抛出一个我想显式捕获的 CustomException 该怎么办?我能做的比检查e.getCause() instanceof CustomException更好吗?

List<Future> futures; //run some task

for (Future future : futures) {
try {
future.get(); //may throw CustomException
} catch (InterruptedException | ExecutionException e) {
if (e.getCause() instanceof CustomException) {
//how to catch directly?
}
}
}

最佳答案

假设CustomException被选中,这是不可能的,因为该语言不允许您添加 catch对于不属于 Future#get() 的此类异常签名,因此永远不会被此方法抛出(这是其契约的一部分)。在您的代码中,注释 may throw CustomException 是因为你知道 特定于此 Future 的任务的实现。至于get Future的方法就接口(interface)而言,任何此类特定于实现的异常都将被包装为 ExecutionException 的原因。 .

此外,使用 e.getCause() 是检查此类自定义异常的正确方法,如 ExecutionException 的文档中明确提到的那样。 :

Exception thrown when attempting to retrieve the result of a task that aborted by throwing an exception. This exception can be inspected using the getCause() method.

关于java - 如何捕获Futures的自定义异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45056320/

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