【发布时间】:2012-06-01 21:19:17
【问题描述】:
我意识到在 Java 中检查异常与未检查异常的相对优点有beenamplediscussion,我无意重新讨论整个辩论。
相反,我想问一个非常具体的问题,这是我在阅读 Joshua Bloch 的 Effective Java,第 2 版时想到的。在阅读时,我注意到在 Item 59(“避免不必要地使用受检异常”)中,Joshua 在 Java API 中给出了一个使用受检异常的示例。具体来说,在Object:
protected Object clone()
throws CloneNotSupportedException
...然后争辩说它应该是一个未经检查的异常。
如果使用 API 的程序员不能做得更好,那么未经检查的异常会更合适。未能通过此测试的异常示例之一是 CloneNotSupportedException。它由 Object.clone 抛出,它应该只在实现 Cloneable 的对象上调用(第 11 项)。在实践中,catch 块几乎总是具有断言失败的特征。异常的检查性质对程序员没有任何好处,但它需要努力并使程序复杂化。
然后我查看他是否有相反的示例,但我找不到。
所以我想问一下是否有人可以提供一个使用未经检查的异常的 Java 示例 API,但在哪里检查的异常会是更好的选择,并解释原因。一个真实的例子会更好,但我愿意接受一个人为的例子,如果这也能说明问题。
编辑:对于那些投票以非建设性的方式结束此内容的人,我想明确表示我不是在寻找意见、辩论、争论或扩展讨论。我也没有进行民意调查。相反,我正在寻找可以对收益如何超过成本进行清晰分析的示例参考。 (其中隐含的是承认有成本。)也就是说,我怀疑这个问题的性质是否使这成为可能。我认为如果 Jon Skeet 做不到,那也不太可能做到。所以也许你是对的。必要时关闭。
编辑:虽然我不为所动,但我将把这个奖励给乔恩,只是因为我的接受率。
【问题讨论】:
标签: java exception language-design api-design effective-java