【发布时间】:2013-11-05 19:17:35
【问题描述】:
我正在让我的 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 之外,还有什么解决方法?
编辑:
一个是
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 的构造函数没有超级调用。会不会是这个原因?
【问题讨论】:
-
你说得对,这应该可以。那一定意味着你的代码不是这样的。您可以发布实际代码的(精简版)版本吗?使用异常和方法的实际声明?
-
能否请您出示您对
A和B的异常声明? -
这是因为
B在您的实际 代码中不是A的超类。您的相似代码编译没有错误 (link)。 -
犯了一个蹩脚的错误。将其发布为答案:(