2014-12-09 4 views
2
try{ 
    if(condition A || condition B || condition C) 
    do something 
}catch (IndexOutOfBoundsException e){ 
    //Equivalent command to continue 
} 

조건 B에서 예외가 있다고 가정하고이를 무시하고 조건 C가 충족되는지 확인하려고합니다. 루프 구조가 아니 어서 continue 명령을 사용할 수 없다면 어떻게 할 수 있습니까?루프 구조가없는 계속 명령

+0

조건 B에 사용자 정의 예외를 던져, 조건 C – gtgaxiola

+0

에 대한 캐치 체크 내부 문제는 그것으로 B에 있다는 것입니다 조건의 목록이 훨씬 더 큰 경우, 각각에 대해 하나의 캐치를 포함시키는 것은 상당히 생산적이지 않습니다. –

+0

https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html을 참조하십시오. –

답변

1

당신이 뭔가를 할 수 있습니다.

귀하가 자신의 모든 조건에서 동일한 작업을한다고 가정하십시오. 구아바 Predicate를 사용

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 
     } 
    } 
0

키워드는 도움이되지 않습니다. 예외가 발생한 후에도 표현식을 계속 평가할 수 없습니다. 당신이 false로 평가되는 조건과 동일한 방법으로 조건에서 예외를 처리하고 싶다면, 방법에 조건을 포장하고, 대신에 그 메소드를 호출

boolean methodForConditionB() { 
    try { 
     return ... // Actual condition goes here 
    } catch (IndexOutOfBoundsException e) { 
     return false; 
    } 
} 
... 
if (conditionA || methodForConditionB() || conditionC) { 
    ... 
} 

을이이 작품으로 사용할 수 있습니다 -약. 그러나 일반적으로 예외적 인 상황이 아닌 정규 계산 중에 예외를 사용하지 않도록해야합니다. 특히 IndexOutOfBoundsException은 프로그래밍 오류를 알리기 때문에 상황을 파악하는 것이 좋은 디자인이라고 상상하기 어렵습니다.

1

일반적으로 우리는 어떤 것을 검사하고 싶을 때 그것을 바꾸고 싶지 않은 조건을 사용합니다.

조건 중 하나가 통과하지 못하면 계속할 이유가 없거나 조건이되지 않습니다.

이제 내가 당신을 줄 수있는 몇 가지 제안이있다, 그러나 아마 최고의 하나는 try 블록 전에 조건의 값을 시작하는 것, 그리고 이후에하는 경우 : 지금

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

(T는 데이터 유형) :

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 
}