try{
if(condition A || condition B || condition C)
do something
}catch (IndexOutOfBoundsException e){
//Equivalent command to continue
}
假设我在条件B中有一个例外,我希望它忽略它并检查是否满足条件C.如果它不是循环结构,我怎么能这样做,因此它不能用于continue命令?
答案 0 :(得分:1)
通常我们在想要检查某些东西时使用条件,而不是改变它。
如果其中一个条件未通过,则没有理由继续,否则就不会有条件。
现在我可以给你一些建议,但最好的建议是在try块之前启动条件的值,以及if之后:
boolean A = false;
boolean B = false;
boolean C = false;
try{
A = condition A;// this will probably be a function
B = condition B;
C = condition C;
}catch (IndexOutOfBoundsException e){
//Equivalent command to continue
}
if(condition A || condition B || condition C)
do something
现在,我们可以将它扩展到3个试块,甚至是这样的函数:
private boolean conditionA()
{
boolean A = false;
try{
A = condition A;
}catch (IndexOutOfBoundsException e){
//Equivalent command to continue
}
return A;
}
答案 1 :(得分:1)
你可以这样做。
假设您对它们的所有条件执行相同的操作。 (T是您的数据类型)
List<T> conditions = ArrayList<>();
boolean flag = false;
for(T condition : conditions) {
try{
if(!condition)
flag = false;
}catch (IndexOutOfBoundsException e){
//Equivalent command to continue
}
if(flag) {
//do something
}
}
答案 2 :(得分:1)
使用番石榴Predicate:
Predicate<MyInput> a = new Predicate(){
@Override
public boolean apply(MyInput i) {
return condition A;
}
};
Predicate<MyInput> b = new Predicate(){
@Override
public boolean apply(MyInput i) {
try {
return condition B;
} catch (IndexOutOfBoundsException e) {
return false;
}
}
};
Predicate<MyInput> c = ...
if(Predicates.or(a, b, c).apply(myInput)) {
// do something
}
答案 3 :(得分:0)
continue
关键字无效:在遇到异常后,您无法继续评估表达式。如果您希望以与评估为false
的条件相同的方式处理条件中的异常,请将条件包装在方法中,然后调用该方法:
boolean methodForConditionB() {
try {
return ... // Actual condition goes here
} catch (IndexOutOfBoundsException e) {
return false;
}
}
...
if (conditionA || methodForConditionB() || conditionC) {
...
}
这可以用作解决方法。但是,一般情况下,在常规计算期间,即在特殊情况之外,应避免使用例外来转移控制。具体来说,IndexOutOfBoundsException
表示编程错误,因此很难想象在捕获它时的情况是好的设计。