列出方法可能抛出的所有异常
Posted
技术标签:
【中文标题】列出方法可能抛出的所有异常【英文标题】:List all exceptions that could be thrown by a method 【发布时间】:2011-02-04 19:19:59 【问题描述】:我知道 Java 强制程序员列出方法将抛出的所有异常,从而创建一种简单的方法来为代码用户列出所有可能抛出的异常。
另一方面,.NET 没有这样的功能,我们只剩下 API 文档或 XML 文档,其中有时列出了异常。
是否有任何 VS 插件可以显示任何给定调用可能引发的异常?考虑到反射的力量,难道不应该通过调用查看所有可能的运行分支并检查是否抛出任何 .NET 异常吗?
【问题讨论】:
而且,如果你通过源码分析发现它抛出了3种不同的异常,你会如何在每一个的代码中加入catch子句呢? 现在大多数 Java 工程师都不承认检查异常是一个糟糕的主意吗? 我认为您必须解决停止问题才能确定可能引发 DivideByZeroException 的每个实例(与类不变量阻止它发生的实例相反) Matt,我不是特别在谈论检查的异常。而是能够查看可能引发的异常。 【参考方案1】:我知道的唯一工具是(商业)Exception Hunter from red-gate software。
但是,它并不像您最初想象的那样具有确定性。根据所使用的附加程序集的版本,如果使用的新版本在构建时抛出的异常超出预期,则在构建时间之后引发的异常可能会有所不同。
在 Java 中,您拥有不必在方法签名中声明的“特殊”RuntimeException(包括所有从它派生的异常)。语言设计者选择不在 C# 中实现检查异常是有正当理由的(它们是否胜过优势是有争议的)。一些 Java 开发人员只是将异常包装在运行时异常中,或者他们忘记使用导致信息丢失的“原因”异常。
有一个很好的interview with Anders Hejlsberg 关于检查的异常以及为什么 C# 没有它们的一些推理 - 感谢 adrianbanks 提供的链接。
【讨论】:
对 Anders Hejlsberg 进行了一次很好的采访,内容涉及检查的异常以及 C# 为何没有这些异常的一些原因:artima.com/intv/handcuffs.html @adrianbank,我知道,但我手头没有链接。感谢发布! 很棒的文章,为我们这些从未在任何实际使用中实际出现过检查的例外的人提供了一个很好的视角。【参考方案2】:我遇到的唯一一个这样做是Exception Hunter,但它是一个你必须购买的商业工具。
【讨论】:
以上是关于列出方法可能抛出的所有异常的主要内容,如果未能解决你的问题,请参考以下文章
为什么Java编译器允许在throws部分中列出异常,该方法无法抛出异常
Java异常处理中关键字throws,throw,try,catch,finally分别代表啥意义?在try块中可以抛出异常吗?