BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

去除Java的受检异常?

| 作者 Geoffrey Wiseman 关注 0 他的粉丝 ,译者 张凯峰 关注 1 他的粉丝 发布于 2007年6月13日. 估计阅读时间: 3 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

Neal Gafter问了一个许多Java开发者都会问过的问题:“Java语言和平台可以没有受检异常(Checked Exception)吗?”

他将反对受检异常的论点总结如下:

对受检异常的使用一直存有争议。许多人批评Java的受检异常,并把它们形容成软件工程中一次失败的试验。实际上,受检异常可能会导致API变得很复杂,程序跟异常检查代码混杂在一起,而这仅仅是为了通过编译器的编译。而另外一些人则认为受检异常是很好的语言特性,只是被误用了,甚至在JDK中也是这样。既然有这样糟糕的“专家”模范作用,我们还能期望普通的Java程序员能做得多好呢?

紧接着的讨论表明人们在这个话题上已两极分化,其中一些代表某种意见,比如以下观点来分别自于“匿名”、Christian Plesner Hansen、Henri和Cedric:

你不会知道自然状态的代码看起来是怎样的;人们捕捉根异常然后抛出六或七个特殊异常,或者使用许多异常来包含业务逻辑然后再抛出Exception,或者捕捉异常后再抛出错误代码,或者让catch块为空,或者捕捉NullPointerException
我是几个月前开始反对受检异常的。我报了一个RFE(#6376696)并和Sun的相关人员讨论。他们对它几乎没什么兴趣,并最终将其标记为“不会Fix”而关闭[……]受检异常就是不起作用。
我猜我是属于喜欢受检异常那一小拨人当中的一个[……]去掉受检异常会鼓励更糟糕的代码,因为当有错误出现时应用程序会直接当掉。而这样将会不再鼓励开发者对错误后果进行思考。
一定要把我算在认为受检异常对于构建大型API非常重要的那一边。当然,它们可能被误用,但未受检异常在许多地方同样也被过度使用了。

那么,受检异常还有用么?它究竟是一个并不是总被正确使用的好办法,还是一个应该终止的失败试验?

这也引出了一个更具普遍性的问题——从Java中去掉某些特性。如果我们一味地往语言中添加特性,而不删除其中的一些,那么语言只会变得越来越复杂。是不是有可能去掉某些特性,从而降低语言的复杂度,而不损害到语言本身呢?我们是不是应该去掉那些deprecated方法,并升级老的API,而不用把向后兼容看得那么神圣不可侵犯呢?

继续追踪关于Java的未来的话题,请锁定InfoQ的Java社区

查看英文原文:Removing Checked Exceptions from Java

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

支持Checked Exception by Guo Xiaogang

我是属于支持Checked Exception的。编码的时候不可能每调用一个方法都去查API文档看有什么异常,Checked Exception是一个提醒,不必等到测试失败才去改。Checked Exception把可恢复的失败标记出来。总要看Stack trace才知道哪里可能失败是一件很痛苦的事情。

Re: 支持Checked Exception by Jacky Li

我也属于支持的行列。Checked Exception和Runtime Exception毕竟是两码事

反对CE by Z Flytwokites

>>因为当有错误出现时应用程序会直接当掉?
会这样吗,不可以在顶层代码catch并记录一下吗,这样即可打断出异常的执行请求,又方便代码的编写,不用写一大堆bug乱飞的catch,把真正的exception烟盖掉。
如果你有delphi的经验,就知道Checked Exeption所承诺的种种好处真是一个大笑话。

还是有的好 by Leon Kennedy

一个完善的程序,其错误检查代码要占功能实现代码的1/3。
除非能够自动化解决错误,否则还是多用点好。
---------
袋鼠蛋开源动态web服务器,拥有完全自主知识产权
www.kangaroo-egg.com

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

4 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT