- API 설계자가 메소드 선언에 예외를 명시하는 이유는 그 메소드를 사용할 때 적절한 조치를 취하라는 뜻이다.
- 따라서 비검사 예외든, 검사 예외든 합당한 이유 없이 예외를 무시하지 말라.
try {
...
} catch (SomeException e) {
}
- 예를 들어
FileInputStream
을 닫을 때가 그렇다. 입력 전용 스트림이므로 파일의 상태를 변경하지 않았으니 복구할 것이 없으며, 스트림을 닫는다는 건 필요한 정보는 모두 읽었다는 뜻이므로 남은 작업을 중단할 이유도 없다.
- 예외를 무시하기로 했다면 catch 블록 안에 그렇게 결정한 이유를 주석으로 남기고 예외 변수의 이름도 ignored로 바꿔놓도록 하자.
Future<Integer> f = exec.submit(planarMap::chromaticNumber);
int numColors = 4; // 기본값. 어떤 지도라도 이 값이면 충분하다.
try {
numColors = f.get(1L, TimeUnit.SECONDS);
} catch (TimeoutException | ExecutionException ignored) {
// 기본값을 사용한다. (색상 수를 최소화하면 좋지만 필수는 아니다.)
}