打破 for 循环并在特定条件发生时抛出异常
Break a for loop AND also throw an exception when a specific condition is happening
所以我正在遍历一个帐户列表,我想为列表中的所有帐户打破整个 "for loop",同时在特定情况发生时抛出异常:
accounts.forEach(account -> {
try {
if (isSomethingHappens()) {
String errorMsg = "bla bla, you can't do that cuz condition is happening";
printError(errorMsg);
throw new Exception(errorMsg); // AND I also, in addition to the exception, I wanna break the whole loop here
}
doA();
doB();
} catch (Exception e) {
printError(e);
}
}
有人有什么优雅的方法可以做到这一点吗?
也许用我自己的例外包装它并且在这种情况下只捕获它?
我的需求是否有良好且已知的做法?
感谢您的帮助,非常感谢!
执行此操作的一个好方法是 重新提出 内部 catch
块中的错误。这会将控制权交给下一个外部 try/catch。因此,将另一个 try/catch 块放在 foreach
构造之外。
- 异常发生,被最里面的
try
捕获。
printError()
内容已完成。
- 重新引发异常,这会杀死
forEach
。
- 围绕
forEach
的 try
捕获重新引发的异常。
首先 - 在 forEach
中,您没有像传统 for loop
那样的 break
功能。所以如果你需要打破循环使用传统的 for loop
在Java lambda表达式中只能抛出运行次异常
所以你可以做的一件事是创建 CustomeRuntimeException
并将 forEach 循环包装在 try catch
块
中
try {
accounts.forEach(account -> {
if (isSomethingHappens()) {
throw new CustomeRuntimeException("bla bla, you can't do that cuz condition is happening");
}
}
} catch (CustomeRuntimeException e) {
printError(e);
}
doA();
doB();
}
通过这样做,如果 isSomethingHappens
return 比 CustomeRuntimeException
正确,它将抛出并被 catch
块和 doA()
& [=21= 捕获] 方法将在 catch 之后执行
所以我正在遍历一个帐户列表,我想为列表中的所有帐户打破整个 "for loop",同时在特定情况发生时抛出异常:
accounts.forEach(account -> {
try {
if (isSomethingHappens()) {
String errorMsg = "bla bla, you can't do that cuz condition is happening";
printError(errorMsg);
throw new Exception(errorMsg); // AND I also, in addition to the exception, I wanna break the whole loop here
}
doA();
doB();
} catch (Exception e) {
printError(e);
}
}
有人有什么优雅的方法可以做到这一点吗? 也许用我自己的例外包装它并且在这种情况下只捕获它? 我的需求是否有良好且已知的做法? 感谢您的帮助,非常感谢!
执行此操作的一个好方法是 重新提出 内部 catch
块中的错误。这会将控制权交给下一个外部 try/catch。因此,将另一个 try/catch 块放在 foreach
构造之外。
- 异常发生,被最里面的
try
捕获。 printError()
内容已完成。- 重新引发异常,这会杀死
forEach
。 - 围绕
forEach
的try
捕获重新引发的异常。
首先 - 在 forEach
中,您没有像传统 for loop
那样的 break
功能。所以如果你需要打破循环使用传统的 for loop
在Java lambda表达式中只能抛出运行次异常
所以你可以做的一件事是创建 CustomeRuntimeException
并将 forEach 循环包装在 try catch
块
try {
accounts.forEach(account -> {
if (isSomethingHappens()) {
throw new CustomeRuntimeException("bla bla, you can't do that cuz condition is happening");
}
}
} catch (CustomeRuntimeException e) {
printError(e);
}
doA();
doB();
}
通过这样做,如果 isSomethingHappens
return 比 CustomeRuntimeException
正确,它将抛出并被 catch
块和 doA()
& [=21= 捕获] 方法将在 catch 之后执行