写点什么

去除 Java 的受检异常?

  • 2007-06-12
  • 本文字数:911 字

    阅读完需:约 3 分钟

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

2007-06-12 01:301901
用户头像

发布了 127 篇内容, 共 49.3 次阅读, 收获喜欢 5 次。

关注

评论 1 条评论

发布
用户头像
<blockquote>使用#999这个灰色看起来比较蒙胧(Chrome,1080P显示器),我觉得可以提升一点灰度,比如#777就刚刚好,可能在4K显示器上#999效果会不错,但我没试过。
2019-11-01 11:22
回复
没有更多了
发现更多内容

【黄金圆环】在研发领域的实践分享

京东科技开发者

非凸科技钻石赞助第四届Rust China Conf 2024

非凸科技

天猫商品详情数据接口:利用接口工具获取数据

tbapi

天猫API接口 天猫商品详情接口

襄阳等保测评机构有哪些?在哪里?

行云管家

等保 等保测评

Percona Toolkit 神器全攻略(性能类)

GreatSQL

交换机是什么?云管理平台可以管理交换吗?

行云管家

云计算 云服务 交换机 云管理

NocoBase 与 NocoDB:开源无代码工具深度对比

NocoBase

开源 低代码 无代码开发 低代码开发 无代码

火山引擎VeDI核心产品DataTester再进化,A/B大模型应用评测功能上线

字节跳动数据平台

大数据 A/B 测试 对比实验 数字化增长

《黑神话:悟空》真的带火云电脑了吗?

脑极体

AI

动物目标检测——基于YOLOv5和树莓派4B平台

芯动大师

人工智能 机器学习 AIGC

阿里云 EMR StarRocks 在七猫的应用和实践

阿里云大数据AI技术

云计算 大数据 阿里云 EMR

TDengine 签约前晨汽车,解锁智能出行的无限潜力

TDengine

数据库 tdengine 时序数据库

软件测试 | 手工转测试开发轻松实现薪资 50%涨幅的逆袭之路

测试人

软件测试

超级驾趣学院 长安马自达MAZDA EZ-6驾驭全场景出行

极客天地

金蝶云·苍穹OEM版产品正式发布!AI时代共创软件产业新质生产力

金蝶云·苍穹

金蝶 生态伙伴 金蝶云苍穹

mcgs笔记 设备窗口 添加父设备与子设备

万里无云万里天

自动化 HMI mcgs

mcgs笔记 新建工程与模拟运行

万里无云万里天

自动化 HMI mcgs

强化安全防线:融合反射API与代码注入防护的先进策略

代码忍者

API 测试 pinduoduo API

How Can Unity+腾讯云开发=微信小游戏?

蛋先生DX

腾讯云 Unity 数据模型 云开发 微信小游戏

🌍 "独立开发者出海技术栈和工具" 现已上线!

Immerse

独立开发者 工具 技术栈 出海 工具站

NPU 与 GPU 相比,有什么差别?| 技术速览

Baihai IDP

程序员 AI gpu 企业 9 月 PK 榜 NPU

2024 医疗 Datathon 又叕来啦~!“理-工-医-信”跨学科联合科研,以数据驱动医疗实践

ModelWhale

R 语言 datathon 医疗大数据

一文说清楚数据集成中的流处理与批处理的区别

谷云科技RestCloud

Apache 数据处理 批处理 ETL 流处理

LeetCode:240. 搜索二维矩阵 II,直接查找,详细注释

Lee Chen

远航汽车远勤山:品质技术服务放首位 扎根新能源汽车赛道持续远航

极客天地

去除Java的受检异常?_Java_Geoffrey Wiseman_InfoQ精选文章