gpt4 book ai didi

Java 7 精确重抛和遗留代码

转载 作者:搜寻专家 更新时间:2023-10-31 08:04:36 25 4
gpt4 key购买 nike

更精确的重新抛出允许编写抛出真正抛出的异常的代码:

   public void foo(String bar) throws FirstException, SecondException {
try{
// Code that may throw both FirstException and SecondException
}
catch (Exception e){
throw e;
}
}

在 Java 7 之前,您必须编写:

   public void foo(String bar) throws Exception {
try{
// Code that may throw both FirstException and SecondException
}
catch (Exception e){
throw e;
}
}

我的问题:是否有一种工具可以检测不精确的抛出,以便将“Exception”替换为“FirstException, SecondException” ?

到目前为止,我已经检查过 Eclipse 中没有编译器警告。 FindBugs 或 CodePro 中没有规则。

最佳答案

我认为这不是编译器警告的情况,因为“过于宽泛”的异常不一定是问题:除非方法是 final 或私有(private)的,否则它定义了任何子类实现可以抛出什么样的异常。在那种情况下,广泛的范围可能是有意的。

您的问题同样适用于 Java pre-7:

public void foo(String bar) throws Exception {
// Code that may throw both FirstException and SecondException
}

在这里,throws Exception 也可以被认为是不好的做法(但没有关于它的警告)。

沿着同一行参数,请注意,当您 try catch 不可能抛出的(已检查)异常时,您将得到一个编译错误,但您可以添加到 throws 方法签名的子句实现主体不使用的各种异常。

不过,像 FindBugs 这样的工具会很有用。


更新:“除非该方法是最终的或私有(private)的”:我必须同意对于私有(private)或最终的方法(也可能是静态方法)可能会有警告。

更新 2:即使对于 final 方法,您也可能希望保留您的选项以在将来抛出更多异常而不破坏接口(interface)。

关于Java 7 精确重抛和遗留代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8077726/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com