已检查vs未经检查的异常统计信息

问题描述 投票:1回答:3

在厌倦了说服我的同伴以争论的方式放弃检查异常之后,我正在寻找任何统计数据,这些统计数据会说明有多少程序员喜欢检查异常,有多少人不喜欢使用它们。 网上有这样的调查/投票/统计吗?

java exception
3个回答
5
投票

如何将它们指向Java教程:

http://download.oracle.com/javase/tutorial/essential/exceptions/runtime.html

其中包括最后一行,清楚地总结了关键点:

这是底线指南:如果可以合理地期望客户端从异常中恢复,请将其作为检查异常。如果客户端无法执行任何操作以从异常中恢复,请将其设置为未经检查的异常。


0
投票

从C ++派生出一般异常处理概念的许多语言和框架的一个问题是,在异常类型中有太多东西被有效编码。如果在throw-and catch站点而不是在异常声明中进行了check-versus-unchecked区分,并且有一种方法可以简明地指定特定的已检查异常应该得到,那么检查异常将是一个很好的概念。如此不受限制地重新投入。遗憾的是,Java要求给定类型的任何异常始终按照选中的方式抛出,或始终取消选中,具体取决于类型,并且不提供方便或简洁的方法将已检查的异常映射到未选中的异常。相反,它使检查异常渗透为检查异常变得最方便,这增加了“滋扰”因素,同时降低了它们的有用性。

如果在throw站点上实现了已检查的异常,并且如果处理不需要的已检查异常的正常方法是将它们转换为未选中,那么可以确保通过抛出特定的已检查异常来指示特定故障条件的方法只会抛出在“想要”报告该特定故障时检查异常;如果在执行方法期间发生了相同类型的异常(未预料到),则会将其转换为未经检查的异常。这样的“检查异常”模型可能很有用,并且还可以导致比普通异常更高效的代码(因为必须在抛出它们的例程的直接调用者中处理已检查的异常,大部分堆栈展开和堆栈跟踪都需要可以跳过正常的异常处理)。遗憾的是,Java的“已检查异常”不能以这种方式工作。


0
投票

如果有这样的调查,那么你的牛人们不会说有更多糟糕的程序员而不是网络上优秀的程序员,他们会期待更多糟糕的程序员投票选出未经检查的例外情况吗?所以它并没有真正解决你的问题。

两个数据点让我信服:

  • 任何地方的其他语言实现者都没有从Java复制已检查的异常。就其他语言而言,它总是失败。如果这个功能有什么好处,有人会把它用于他们的新语言。
  • 从Spring到Hibernate到Java EE,框架编写者之间已经有了广泛的变动,用未经检查的异常替换了许多已检查的异常。

除此之外,您可以尝试查看项目的代码,并查找检查异常如何导致异常被吃掉或无用的问题的示例“抛出异常”条款无处不在。

© www.soinside.com 2019 - 2024. All rights reserved.