Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在方法签名中抛出多个异常是否不好?_Java_Exception_Methods_Exception Handling - Fatal编程技术网

Java 在方法签名中抛出多个异常是否不好?

Java 在方法签名中抛出多个异常是否不好?,java,exception,methods,exception-handling,Java,Exception,Methods,Exception Handling,让我们举个例子 public String myMethod(String s) throws ExceptionA, ExceptionB { } 从一个方法引发这种多个异常是否不好。i、 我们是否需要使用包装器将其简化为如下所示 public String myMethod(String s) throws ExceptionC{ try{ }catch(ExceptionA | ExceptionB e){ throw new ExceptionC(e

让我们举个例子

public String myMethod(String s) throws ExceptionA, ExceptionB {

} 
从一个方法引发这种多个异常是否不好。i、 我们是否需要使用包装器将其简化为如下所示

public String myMethod(String s) throws ExceptionC{
    try{
    }catch(ExceptionA | ExceptionB e){
        throw new ExceptionC(e);
    }
}

如果是这样,当我们将异常冒泡到顶部时,如何在更高级别的类中找到要记录的根本原因异常?

抛出两种不同类型的异常是完全可以接受的做法。这是一种直截了当的方法,声明这里有几件事情可能会出错,并让使用它的人有机会单独处理它们(如果他愿意的话)

从一个方法中抛出这种多个异常是否不好


否。如果使用选中的异常,这是完全正常的。它表明两种不同的异常情况可能会出错,并允许调用以两种不同的方式轻松处理这两种不同的异常情况。

我认为在一个方法中抛出多种类型的异常没有什么错,否则会使事情复杂化。如果抛出不同的异常,则调用方可以在可读的代码段中以不同的方式处理它们,而无需打开/查找根本原因等。注意,出于各种原因(如添加信息),将其封装在另一个异常中仍然是很好的,但这是一个不同的主题。

而不仅仅是
抛出
异常;总是
尝试
代码和
捕获
如果有异常。我喜欢这样想:抛出让你的生活和代码更干净,如果你不打算做任何自定义捕获,就使用它。除了在Catch语句中打印堆栈跟踪之外,还可以尝试Catch。很好的解决方法。那么,如果我问你,哪种方式更好呢?@supunvyjerathne:我会说这需要一个意见,并恭敬地拒绝评论。:-)有一个阵营感觉很糟糕,包括(例如)C#的设计师。还有一个阵营觉得他们很好,包括(例如)Java的设计师。你可以自己挑选事实上,我问过,在我发布的两个代码之间,哪种代码风格更好。:)另外,请您提及C#designers使用的替代方案是什么@SupunWijerathneu::-)这取决于例外情况。如果它们是不同的事情,你会以不同的方式处理,我会选择第一个。如果它们非常相似,并且调用代码不太可能需要单独处理它们,那么可能会有一个合并它们的理由。(C#设计人员选择的是纯粹未经检查的异常——您不必声明的那种异常,您依靠阅读文档来了解方法调用的异常类型,而不是让编译器检查。)