考虑以下场景
public class A extends Throwable {}
public class B extends A {}
public class C
{
public void f() throws A, B
{
// Some condition
throw new A();
// Some condition
throw new B();
}
void g()
{
f();
}
}
使用上面的代码,编译器将警告不捕获(或不声明为抛出)
C.java:17: unreported exception A; must be caught or declared to be thrown
f();
^
如果我通过将 g 更改为来解决此问题
void g() throws A
然后我不再收到警告(B 被捕获 A 隐含地捕获)
有没有办法让编译器报告所有未捕获的异常,包括基类异常(比如这里的 B)。
一种方法是更改g()
并将其声明为
public void f() throws B, A
在这种情况下,编译器将首先报告 B,一旦我将 B 添加到 的throw
规范中g
,它将报告 A。
但这很痛苦,因为
- 这是一个两步过程
- 我可能无法控制
f
更改其投掷规格的功能。
有没有更好的方法让编译器报告所有异常?
我并不是说编译器在这里做错了什么——我要问的是——“有没有办法让编译器报告所有异常?”。或者是否有一个工具可以帮助我自动获取这些信息。
该函数f
在不同情况下抛出 A & B。如果我是. g
_ g
_ 有没有办法让编译器检测到这一点并警告我。g
throws A
throws B, A
同样,我并不是说编译器没有警告我这样做是错误的。我要问的是是否有办法让编译器做我想做的事。或者报告这个的工具?