我正在使我的foo方法抛出异常A,如
void foo() throws A {
....
throw new A();
}
有一个预先存在的函数bar()调用foo,bar最初会抛出一个异常B,它是A的超类,如
void bar() throws B {
foo();
throw new B();
}
问题是在foo()中添加throw new A后,编译器正在声明我声明的内容 bar()也抛出A. A是否扩展B这一事实是否暗示了这一点?除了在bar()的throws子句中添加A之外,还有什么解决方法?
编辑:
A是
public class A extends B {
private complex-type type;
public A(String message);
public A(complex-type type);
}
B是
public class B extends C {
public B(String message);
}
我认为A的构造函数没有超级调用。可能是原因吗?
答案 0 :(得分:0)
如果从功能栏中删除了抛出物B.默认操作是重新生成foo()中生成的exeption。
您可以在foo()的调用者中捕获此异常。 Foo本身也可以像你的情况一样抛出异常。在这种情况下,您必须在throw子句中添加A
因此
void bar() throws A, B {
foo();
throw new B();
}
如果A和B都扩展Throwable类或实现Exception接口,你也可以简单地抛出异常
答案 1 :(得分:0)
我认为当你说A伸出B时你交换了A和B.你的例子编译得很好:
public class Tmp {
static class B extends Exception {
}
static class A extends B {
}
void foo() throws A {
throw new A();
}
void bar() throws B {
foo();
throw new B();
}
}
答案 2 :(得分:0)
对不起,伙计们犯了一个非常蹩脚的错误。在该包中有2次出现foo()调用我正在查看错误的事件。非常感谢,抱歉!!!