因此,请描述以下情形。我有两套类和接口。 ClassA
,ClassB
,ClassAInterface
和ClassBInterface
。 ClassA
在其几种方法中使用ClassB
。来自ClassB的这些方法有时会抛出异常。在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
方法在特定情况下引发异常,并且表示它有时会抛出异常,因此为什么ClassA不能编译。为了解决这个问题,我不能在ClassA.example()
上添加一个throws语句,因为它违反了ClassAInterface
。如果我只是将ClassB.exampleTest()
包装在try语句中,ClassA.example()
的其余大部分都会抛出错误,因为ClassB
表示有什么错误,您应该在该点抛出异常,这是抛出异常的全部要点。所以我不确定为什么会发生这种情况或者如何解决这个问题。
好吧,可能你的决定不允许ClassA抛出异常是错误的。但是,如果您确信可以将ClassB的异常包装在RuntimeException(未选中)中,或者只是从ClassB中捕获并记录该异常。 – markspace 2014-09-24 22:21:12
它发生是因为它们是Java中的规则,用于“检查”异常。如果你想责怪某人,那就责备John Goodenough。他撰写了关于例外的“开创性”文章,尽管他当时对这些文章的真正了解不多,从那时起我们一直坚持他的计划。 – 2014-09-24 22:32:45