继续命令没有循环结构

时间:2014-12-09 14:57:55

标签: java exception exception-handling

try{
  if(condition A || condition B || condition C)
    do something
}catch (IndexOutOfBoundsException e){
  //Equivalent command to continue
}

假设我在条件B中有一个例外,我希望它忽略它并检查是否满足条件C.如果它不是循环结构,我怎么能这样做,因此它不能用于continue命令?

4 个答案:

答案 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表示编程错误,因此很难想象在捕获它时的情况是好的设计。