Exception
인스턴스를 메서드 인수로 처리하는 디자인 패턴을 찾고 있습니다. 예외를 메서드 인수로 처리
public interface AsyncCallback<T> {
void onFailure(Throwable caught);
void onSuccess(T result);
}
을의 onFailure
방법은 I가 필요 Throwable
인스턴스를 수신 핸들.
지금, 나는 물론 수 내 처리 코드에서 예를
ConstraintViolationException
TimeoutException
NoSuchElementException
, 나는이 방법으로받을 수있는 예외의 번호를 가지고 다음을 작성하십시오 :
void handleException(final Exception e) {
if(e instanceof TimeoutException) {
handleTimeout();
} else if (e instanceof NoSuchElementException) {
handleInvalidElement();
} else {
stopAndCatchFire();
}
}
하지만 내 눈에는 아주 추해 보입니다. 큰 if..else if
체인과 instanceof
의 과도한 사용은 피하는 것이 좋습니다.
Exception
을 처리 할 수
try...catch
구조를 사용할 수 있다고 생각 :
void handleException(final Exception e) {
try {
throw e;
} catch (TimeoutException te) {
handleTimeout();
} catch (NoSuchElementException nsee) {
handleInvalidElement();
} catch (Exception ex) {
stopAndCatchFire();
}
}
을하지만 이것은 어떻게 든 남용처럼 보인다. 두 번째 접근법에 대한 단점이나 첫 번째 사례를 피하기 위해 사용할 수있는 다른 접근법을 알고 있습니까?
두 번째는 확실히 더 나쁜 패턴입니다. 그것은 또한 매우 부적당하다. – djechlin
두 번째 모델은 성능이 좋지 않지만 (비용의 대부분이 예외를 구축하기 때문에 첫 번째 모델만큼 비싸지는 않지만) 개념적으로보기 흉한 모델입니다. 당신은 예외 이름을 얻고 그것에 대해'switch'를 수행하는 것을 고려할 수 있습니다 (서브 클래스를 처리하지는 않지만). –
@djechlin interesting. 왜 그게 더 나쁜 패턴이라고 생각하니? 두 번째 경우의 성능은 의심의 여지없이 가난합니다. –