하위 메서드가 예외를 throw하면 전용 "패키지"예외의 캡슐화가 좋은 것으로 간주됩니까?구성 요소를 통해 예외를 throw하는 것이 좋습니다.
public String doStuff() throws UtilsException {
try {
throw new NullPointerException("test");
} catch (NullPointerException e) {
throw new UtilsException("something occured", e);
}
}
//use this exception for all classes of this package/component
public class UtilsException extends Exception {
private static final long serialVersionUID = 1L;
public UtilsException() {
super();
}
public UtilsException(String message, Throwable cause) {
super(message, cause);
}
public UtilsException(String message) {
super(message);
}
public UtilsException(Throwable cause) {
super(cause);
}
}
는 Optional.empty()
복잡한 응용 프로그램의 잡기/던지는 피하기 위해 대안이 될 수 있을까?
public Optional<String> doStuff() throws UtilsException {
try {
return Optional.of("ok");
} catch (NullPointerException e) {
LOG.error("Something append... {}", e.getMessage());
return Optional.empty();
}
}
하위 예외를 상위 예외로 래핑하는 것은 일부 설정에서는 좋은 방법 일 수 있지만 'NullPointerException'에 대해 말하는 경우에는 예외가 아닙니다. 당신은'NullPointerException'을 잡아서는 안됩니다. 그것은 귀하의 모든 레벨에서 동일한 의미를 지닙니다. 'Optional'은'NullPointerException'이 발생한 보고서가 아니라 잠재적으로 부재중 인 값을 캡슐화합니다. 우선 NullPointerException을 피하십시오. 'Optional'을 사용하면됩니다. – Holger
NullPointerException은 설정을 설명하기위한 것이 었습니다. 감싸는 것은 예외의 근원을 따르는 것이 흥미로운 것처럼 보인다. –
그럼 정말 나쁜 예를 골랐어 요. 클래스 바이트를로드하는 동안 발생한'IOException'을 캡슐화하는'ClassNotFoundException'을 고려하십시오. 특수한 경우는 확인 된 예외를 허용하지 않는 API 계층입니다 (예 : 데이터베이스에 대한'Collection' 뷰를 고려하십시오. 그곳에는 기본 스토리지 시스템의 오류를 래핑해야합니다. 'IllegalStateException' 또는'NoSuchElementException'에서. 제 생각에는 이것들이 더 좋은 예입니다. – Holger