所以,基本上我有这种代码,重复发生的地方:
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);
}
}
我想通过抛出 aIllegalArgumentException
并立即在 catch 块中捕获它来避免重复。
所以代码看起来像:
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);
}
}
那行得通吗?因为只要我删除ExecutionException
的throw new
行不下划线红...
IllegalArgumentException
是运行时异常。
所以编译器不会限制你处理它。
我要补充一点,该ExecutionException
catch
语句对处理IllegalArgumentException
投掷也无济于事:
catch (ExecutionException e){
log.info("" + e);
this.processAndStoreData(returnedPoolData, i, calledApis, id, true);
}
asIllegalArgumentException
不是ExecutionException
.
要捕获这两个异常,您可以编写一个 catch 语句,例如:
catch (ExecutionException | IllegalArgumentException e){
...
}
除了正确捕获异常的方法之外,我还要补充一点,抛出异常以在同一方法中捕获它不一定是对异常的良好使用。
避免三个重复调用的另一种方法是使用布尔值,例如:
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);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句