我的Java for loop
检查id
中的不同ids() String[] array
为:
BackTest.java
.....
for (String id: ids()) {
//..do something
addResult(result(id));
}
其中addResult()
将结果添加到某个Java map
。如果id does not exist
,即http status!=200
,那么我将抛出一个新的异常,如下面的代码段所示:
Api.Java
......
if (status != 200) {
String error = "No additional error message received";
if (result != null && result instanceof JSONObject) {
JSONObject obj = (JSONObject) result;
if (obj.containsKey("error")) {
error = '"' + (String) obj.get("error") + '"';
}
}
throw new ApiException(
"API returned HTTP " + status +
"(" + error + ")"
);
}
现在在我的第一个for
循环中,如果循环中的第一个id does not exist
,那么我抛出一个异常,这会使my entire process to fail
无法检查{{ 1}}。我如何确保即使它在数组中的第一个id失败,代码应该继续检查更多的ID?
我可以考虑用try-catch块替换further ids as a part of id array
。一个例子就是好的。
答案 0 :(得分:2)
您可以像这样处理异常;
for(String id : ids()) {
try {
addResult(result(id));
} catch(ApiException e) {
System.err.println("Oops, something went wrong for ID "+id+"! Here's the stack trace:");
e.printStackTrace();
}
}
这将捕获异常,阻止它传播超过此点并因此结束循环,它将打印消息和堆栈跟踪。
答案 1 :(得分:0)
如果您想继续处理列表/数组的其余部分而不会产生新的异常,那么我会考虑使用continue
关键字。
continue
关键字专为此类情况而设计。它会导致程序执行立即返回到最近循环的开始并测试其状态。我建议使用以下设置。
for(String id : ids()) {
//do stuff...
if(status != 200) {
//write to data logger, etc...
continue;
}
addResult(result(id));
}
有些人不喜欢使用continue
,因为其中太多可能会产生混乱的代码。但是,如果谨慎使用,它们可以帮助减少循环中的代码量。