所以请看下面的场景。我有两组类和接口。 ClassA
,ClassB
,ClassAInterface
和ClassBInterface
。 ClassA
在其多种方法中使用ClassB
。 ClassB中的这些方法偶尔会抛出异常。
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();
}
}
}
所以我遇到的问题是我在Unhandled Exception type ExampleException()
方法中遇到ClassA.example()
错误。为什么会这样?我希望ClassB
方法在特定情况下抛出异常,并表示它有时会抛出throws ExampleException()
的异常,为什么ClassA不能编译。要解决此问题,我无法在ClassA.example()
上添加throws语句,因为它会违反ClassAInterface
。如果我只是将ClassB.exampleTest()
包装在try catch语句中,那么ClassA.example()
的其余部分会抛出错误,因为ClassB
表示出错了,你应该在那一点抛出异常,抛出异常的全部意义。所以我不确定为什么会这样或者如何解决它。
答案 0 :(得分:2)
为什么代码拒绝编译?
这很正常。如你所说,B.exampleTest()
有时会引发异常。 A.example()
调用B.exampleTest()
并且不会发现任何异常。因此,即使异常并非始终发生,有时也会发生。当它发生时,A.example()
也会引发异常。所以它必须被宣布或抓住。就像B.exampleTest()
有时会抛出异常一样,A.example()
有时会抛出相同的异常。
现在,该怎么办?你有3个选择:
A.example()
的调用者必须决定在这种情况下该做什么。A.example()
内抓住它,并以某种方式处理它。