0
다음 시나리오를 그림. 나는 두 세트의 클래스와 인터페이스를 가지고있다. ClassA
, ClassB
, ClassAInterface
및 ClassBInterface
. ClassA
은 여러 가지 방법으로 ClassB
을 사용합니다. ClassB의 이러한 메서드는 간혹 예외를 throw합니다. 인터페이스 및 Java 클래스의 예외 처리
public class ClassA implements ClassAInterface {
public void example() {
ClassB test = new ClassB();
ClassB.exampleTest();
//more code using ClassB
}
}
public class ClassB implements ClassBInterface {
public void exampleTest() throws ExampleException() {
boolean tru = false;
if (tru) {
throw new ExampleException();
}
}
}
그래서 제가하는 데 문제는 내가
ClassA.example()
방법에
Unhandled Exception type ExampleException()
오류를 얻고 있다는 것입니다. 왜 이런 일이 생길까요?
ClassB
메서드가 특정 경우에 예외를 throw하고 때때로
throws ExampleException()
과 함께 예외를 throw하므로 ClassA가 컴파일되지 않습니다. 이를 해결하기 위해
ClassAInterface
을 위반할 것이므로
ClassA.example()
에 throws 문을 추가 할 수 없습니다. 그리고 만약 내가 단지
ClassB.exampleTest()
을 try catch 문으로 감싸면
ClassB
이 잘못된 것을 의미하고 예외를 throw하는 전체 지점 인 예외 지점을 던져야하기 때문에
ClassA.example()
의 많은 부분이 오류를 던질 것입니다. 그래서 나는 왜 이것이 일어나고 있는지, 어떻게 해결할 지 확신하지 못한다.
아마도, ClassA가 예외를 throw하지 못하도록하는 귀하의 결정은 잘못되었습니다. 그러나 확실한 경우에는 RuntimeException에서 ClassB의 예외를 래핑하거나 (확인되지 않음) 클래스 B에서 예외를 catch하고 로깅 할 수 있습니다. – markspace
"확인 된"예외에 대한 규칙이 Java의 규칙이기 때문에 발생합니다. 누군가를 비난하고 싶다면 John Goodenough를 비난하십시오. 그는 그 당시에 그들에 대해 많이 알지 못했지만 "예외적 인"기사를 썼다. 그리고 그 이후로 우리는 그의 계획에 매달렸다. –