java异常的超类,java – 列出所有未报告的异常(包括声明异常的超类的异常)

请考虑以下情形

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();

}

}

使用上面的代码,编译器将警告不要捕获(或不声明为throws)

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添加到g的throw规格,它将报告A.

但这很痛苦,因为

>这是一个两步过程

>我可能无法控制功能f来改变它的投射规格.

有没有更好的方法让编译器报告所有异常?

我并不是说编译器在这里做错了 – 我要问的是 – “有没有办法让编译器报告所有异常?”.或者有一个工具可以帮助我自动获取这些信息.

函数f抛出A& B在不同的情况下.如果我是g的作者,我不会意外地压制调用g可能抛出B的信息 – 如果我将g声明为抛出A而不是将其声明为抛出B,A会发生什么.有没有办法要求编译器检测到这一点并警告我.

再说一次,我并不是说编译器做错了,不要警告我反对.我要问的是,是否有办法让编译器按我的意愿行事.还是报告这个的工具?

解决方法:

这是编译器特定的行为.在Eclipse中使用场景时,编译器会告诉错误列表中的两个异常,尽管工具提示中只显示了一个.更有趣的是,当使用自动修复时,要么添加catch子句或throws声明,Eclipse将始终添加两者(换句话说:所有异常),忽略异常之间的任何子类关系.声明的顺序对此行为没有影响.所以也许你只想使用Eclipse:^).

标签:java,exception,static-analysis,throws

来源: https://codeday.me/bug/20190624/1282304.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值