2016-06-14 6 views
0

내 자바 for loop 검사를 계속 : addResult() 일부 자바 map에 결과를 추가하는 경우사용자 정의 메시지와 함께 자바 던져 예외를 교체하고 같은 <code>ids() String[] array</code>에 다른 <code>id</code>에 대한

BackTest.java

..... 
    for (String id: ids()) { 
     //..do something 
     addResult(result(id)); 
    } 

. 여기에 id does not exist 경우, 즉 HTTP status!=200 다음 코드에서와 같이 다음 나는 새로운 예외를 던지고 : 첫 번째 ID의 경우,

Api.Java 첫 for 루프에서 지금

...... 
    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 + ")" 
          ); 
     } 

루프 does not exist, 그렇다면 예외를 던지고 my entire process to fail이되며 further ids as a part of id array을 확인하지 못합니다. 배열의 첫 번째 ID에서 오류가 발생하더라도 코드가 추가 ID를 계속 확인해야하는지 어떻게 확인합니까?

throw new exception을 try-catch 블록으로 대체 할 수 있습니다. 좋은 예가 될 것입니다.

+1

예외를 잡아 내고'try' /'catch'를 사용하여 예외를 처리 할 수 ​​있습니다. 네가 묻고있는거야? – immibis

+0

네, 맞습니다. –

+0

그래서 try {addResult (result (id));} catch (ApiException e) {e.printStackTrace();}'? – immibis

답변

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(); 
    } 
} 

이 시점을지나 전파 따라서 루프 끝에서 중지 예외를 잡을 것, 그리고 그것을 대신 메시지와 스택 추적을 인쇄합니다.

0

새로운 예외를 throw하는 오버 헤드없이 나머지 목록/배열을 계속 처리하려면 continue 키워드를 사용합니다.

continue 키워드는 이와 같은 상황을 고려하여 설계되었습니다. 이로 인해 프로그램의 실행이 가장 가까운 루프의 시작으로 즉시 돌아가고 조건을 테스트합니다. 다음 설정을 사용하는 것이 좋습니다.

for(String id : ids()) { 

     //do stuff... 

     if(status != 200) { 
      //write to data logger, etc... 
      continue; 
     } 

     addResult(result(id)); 
    } 

일부

지저분한 코드를 생성 할 수 있습니다 그들 중 너무 많은 continue를 사용하여 좋아하지 않는다. 그러나 사용하지 않는 경우 루프 내에서 코드의 양을 줄이는 데 도움이 될 수 있습니다.