짧은 형식 : 오버라이드 된 메서드가 예외를 throw하지 않을 때 예외를 throw하는 방법 (또는 멋진 예외 처리를 수행하거나 중지하려면 강제로 실행을 중지하는 방법) ?오버라이드 된 메서드가 예외를 throw하지 않을 때 예외 처리
컨텍스트 : 우리는 Java "매크로"를 사용하여 자동화 할 수있는 독점 소프트웨어 라이센스를 보유하고 있습니다. 사용자 정의 된 매크로이 형식이어야
public class MyMacro extends SoftwareMacro {
public void execute() {
// user code goes here
}
}
즉 SoftwareMacro
익스텐트 그 기본 클래스 '를 겹쳐 execute
execute
라는 메소드가 클래스. 이 덮어 쓰기 내용은 execute
이며 매크로가 "재생"될 때 실행됩니다.
그러나 재정의 된 execute
메서드는 예외를 throw하지 않습니다.
execute() in com.mycompany.mypackage.MyMacro cannot implement execute() in
somesoftware.base.SoftwareMacro
overridden method does not throw java.lang.Exception
아마이 순진하지만, 개발하는 동안 나는 보통 내가 그들을보고 디버깅에 갈 수 있도록 중지 상단과 힘 실행까지 적절한 예외 유형 거품을 좋아합니다. 이것은 분명히 여기에 옵션이 아닙니다.
대신 RuntimeException
을 던집니다. (RuntimeException
가 지정 될 필요가 없기 때문에) 그것은 기본 클래스 방법 contracy의 "정신적 위반"을 약간 거추장스럽게 느낀다.
P. 아니요, 재정의 된 execute
메소드의 소스 코드를 변경할 수 없습니다.
하는 깨끗한 방법은 내부에서 예외의 '인상'을 감지 할 중앙 '예외'핸들러를 가지고하는 것입니다 재정의 메서드 및 응용 프로그램 실행을 중단합니다. 실용적인 방법은 RuntimeException을 던지는 것입니다. – mcfinnigan
@DaveHowes - 예, 잘못 읽었습니다. 죄송합니다. Java는 재정의 메소드의 예외 사양이 재정의 된 메소드의 적절한 하위 집합이되도록 요구합니다. 빈 세트는 당연히 적절한 부분 집합입니다. 슈퍼 클래스가하는 동일한 예외를 throw하지 않아도됩니다. –