2012-11-26 2 views
3

으로 실패 할 수있는 Java - Iterator를 사용하여 일부 데이터에서 반복자를 디자인하려고합니다. 이는 어딘가에서 실패 할 수 있습니다. 예를 들어, 을 호출하면 DB에서 다음 행을 읽고 진행할 Iterator<DatabaseObject>이됩니다. 다른 예는 Exception을 발생시키는 API의 객체를 사용하여 데이터를 처리하는 것을 포함 할 수 있습니다. 문제는 Iterator가 예외를 발생시키는 것이 허용되지 않기 때문에이 시나리오에서 어떻게 응답 할 것인가 ... NoSUchElementException을 던지고 거기에 의미있는 메시지를 제공해야 하는가?제목에 설명 된대로

답변

5

체크되지 않은 예외를 throw 할 수 있습니다. 사실 NoSuchElementException을 던지는 것이 합리적입니다. 오류가 그러한 요소가되는 것을 막았 기 때문입니다.

예외가 기본 예외를 래핑하는 것이 좋을 것입니다. 불행히도 NoSuchElementException에는 또 다른 예외가 필요한 생성자가 없습니다. 당신은 근본 원인을 전파하려는 경우, 당신은 그런 RuntimeException을 던지는 같은 다른 경로를 이동해야합니다 :

try { 
    ... 
} catch (<some exception type> e) { 
    throw new RuntimeException("Next element not accessible", e); 
} 

또는 (예 : null 같은) 일부 예약 된 값을 반환 할 수 있습니다.

0

나는 그것이 당신이 오류를 어떻게 처리 하느냐에 달려 있다고 주장 할 것이다. 문제가 발생하면 false를 반환 할 수 있도록 hasNext()에 이미있는 다음 항목을 읽는 것이 좋습니다. 클라이언트 관점에서 생각해보십시오. 클라이언트는 어떻게 대응해야합니까?

0

"실패 할 수있는 반복기"를 만들려고 시도한 API 중 대부분은 결국 매우 심하게 작동하게됩니다. 나는 단지 Iterator을 사용하지 말 것을 강력히 권합니다.

관련 문제