gpt4 book ai didi

java - 抛出新的异常并立即捕获它以避免代码重复。可能的?

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

所以,基本上我有这种重复发生的代码:

for (int i = 0; i < dataFromApi.size(); i++){

try {
returnedPoolData = dataFromApi.get(i).get();

if(returnedPoolData == null || returnedPoolData.getJsonString().isEmpty())
this.processAndStoreData(returnedPoolData, i, calledApis, id, true);
else
this.processAndStoreData(returnedPoolData, i, calledApis, id, false);

} catch (ExecutionException e){
log.info("" + e);
this.processAndStoreData(returnedPoolData, i, calledApis, id, true);
}
}

我想通过抛出 IllegalArgumentException 并立即在 catch block 中捕获它来避免重复。

所以代码看起来像:

for (int i = 0; i < dataFromApi.size(); i++){

try {
returnedPoolData = dataFromApi.get(i).get();

if(returnedPoolData == null || returnedPoolData.getJsonString().isEmpty())
throw new IllegalArgumentException("Returned data was empty.");
else
this.processAndStoreData(returnedPoolData, i, calledApis, id, false);

} catch (ExecutionException e){
log.info("" + e);
this.processAndStoreData(returnedPoolData, i, calledApis, id, true);
}
}

这行得通吗?因为一旦我删除 ExecutionExceptionthrow new 行就不会以红色下划线...

最佳答案

IllegalArgumentException 是运行时异常。
所以编译器不会限制你处理它。
我想补充一点, ExecutionException catch 语句对于处理 IllegalArgumentException 抛出也没有帮助:

catch (ExecutionException e){
log.info("" + e);
this.processAndStoreData(returnedPoolData, i, calledApis, id, true);
}

as IllegalArgumentException 不是 ExecutionException 的子类。
要捕获这两个异常,您可以编写一个 catch 语句,例如:

catch (ExecutionException | IllegalArgumentException e){
...
}
<小时/>

除了正确捕获异常的方法之外,我还想补充一点,抛出异常以在同一方法中捕获它并不一定是对异常的良好使用。
避免三个重复调用的另一种方法是使用 boolean 值,例如:

for (int i = 0; i < dataFromApi.size(); i++) {

boolean isErrorCase = false;

try {
returnedPoolData = dataFromApi.get(i).get();

if (returnedPoolData == null || returnedPoolData.getJsonString().isEmpty()) {
isErrorCase = true;
}

} catch (ExecutionException e) {
log.info("" + e);
isErrorCase = true;
}

this.processAndStoreData(returnedPoolData, i, calledApis, id, isErrorCase);

}

关于java - 抛出新的异常并立即捕获它以避免代码重复。可能的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50424839/

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