구아바 라이브러리에서 Closer 유틸리티를 사용하는 방법을 파악하는 데 어려움을 겪고 있습니다. 아래 코드를 참조하십시오.구아바를 올바르게 사용하는 방법
- 한 것은 IndexWriter 객체 초기화 및
close()
모두에IOException
을 던졌습니다이다. 따라서 finally 및 rethrow 블록의 코드에 밑줄이 그어져 있습니다. - 다른 질문은 왜
`
int getDocumentsCount() {
Closer closer = Closer.create();
try {
IndexWriter iwriter = closer.register(openIndexWriter());
return iwriter.numDocs();
} catch (Throwable e) {
logger.error(e, e);
return -1;
} finally {
closer.close();
}
}
IndexWriter openIndexWriter() throws IOException {
return new IndexWriter(directory, analyzer, false,
IndexWriter.MaxFieldLength.UNLIMITED);
}
(내가 그 자리에서 사람들을 기록하는 것을 선호) 대신에 다른 예외 타입의
Throwable
을 잡으려고하고 난이 오류가 다시 발생해야합니까이다
`
덕분에 많은
(자바 6 붙어) 0
1) 나는했습니다 : 시도-피라미드를 방지하기 위해
, 나는 다음을 수행 할 것 : 귀하의 경우를 들어
, 이것은 당신이해야 할 것입니다 그들의 모범을 보았습니다. 문제는 close가'IOException'을 던질 수 있기 때문에 finally 블록에서 컴파일 오류가 발생한다는 것입니다. 2) 예외를 제소해야합니까? 내 말은, Closer가 예외를 등록하는 데 어떻게 도움이되는지는 모르겠다. 어쨌든 catch 블록에 잡힌 예외를 되돌려 놓은 것은 더 가깝다. (그래서 실제로 그것을 이미 알고있다.) – d56
아니요, 예외를 "다시 제기 할 필요가 없습니다. ** ** 선언해야합니다. 나는 당신이 던져 질'IOException'을 선언 할 필요가 있음을 보여주는 해답을 채택했다. 'Closer'는'Closeable'을 처리하는 것을 처리한다는 것을 명심하십시오. '클로저 (Closer) '범위 밖에서 예외 처리에 관해서는 아무 말도하지 않습니다. –
감사합니다. 1) 그러나'IOException'을 전혀 던지지 않으려 고합니다.'Closer'가 그것을 처리 할 수 없다는 다소 짜증이 나서, 메소드 시그니처에서 그것을 선언하도록 강요합니다. 2) 내가 이해하지 못하는 이유는 'MyOwnCheckedException'을 다시 시작해야하는 이유입니다. 저 자신의 자원에 의해 던져진 예외를 변환하는 방법일까요? – d56