写点什么

去除 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:301911
用户头像

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

关注

评论 1 条评论

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

华金证券携手非凸科技,共话AI赋能交易新未来

非凸科技

淘宝首位程序员离职,竟投身AI新公司做这事!

王磊

阿里云消息队列 RocketMQ 5.0 全新升级:消息、事件、流融合处理平台

Apache RocketMQ

阿里云 RocketMQ 云原生 消息队列

RocketMQ在搜狐的创新实践

Apache RocketMQ

kafka RocketMQ 云原生 消息队列

向量索引的混合查询方法,你选对了吗?

老纪的技术唠嗑局

索引 OceanBase 社区版 向量化

第一!百度智能云领跑视觉大模型赛道

百度Geek说

移动端即时通讯源码/IM聊天源码RainbowChat,纯原生体验丝滑、全源码易二开

JackJiang

网络编程 IM 即时通信

行业热点丨一分钟出结果!让创新设计飞起来

Altair RapidMiner

AI 仿真 CAE 网格划分 SimSolid

TRAE cue 背后的挑战与思考

火山引擎开发者社区

火山引擎 大数据 火山引擎 云服务 Trae

基于 RocketMQ 的基金数字化陪伴体系的架构实践

Apache RocketMQ

阿里云 RocketMQ 云原生 消息队列 金融行业

数据、情绪与传播链条:全球社交媒体监控的三重任务

沃观Wovision

AD域组策略管理

运维有小邓

AD域 AD域管理

EDA 事件驱动架构与 EventBridge 二三事

Apache RocketMQ

阿里云 Serverless 云原生 消息队列 事件总线

博时基金基于 RocketMQ 的互联网开放平台 Matrix 架构实践

Apache RocketMQ

阿里云 云原生 MQ 消息队列 Matrix

基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台

Apache RocketMQ

阿里云 RocketMQ 云原生 MQ 消息队列

CST如何理解和设置频域F-solver频点

思茂信息

cst CST软件 CST Studio Suite

IoT 小程序:如何破解设备互联的碎片化困局?

Byte_Me

小程序 App IOT Platform IoT

开口就行!TRAE 2.0 语音输入功能

火山引擎开发者社区

AI 火山引擎 Trae

阿里的 RocketMQ 如何让双十一峰值之下 0 故障?

Apache RocketMQ

阿里云 RocketMQ 云原生 消息队列

海外红人营销中最常见的五个误区

Wolink

海外推广 达人营销

快手发布Klear-Reasoner:90.5%准确率登顶8B模型榜首,GPPO算法破解RL训练裁剪难题

快手技术

RocketMQ 千锤百炼--哈啰在分布式消息治理和微服务治理中的实践

Apache RocketMQ

阿里云 云原生 MQ 消息队列

云原生消息队列RocketMQ:为什么我们选择 RocketMQ

Apache RocketMQ

阿里云 云原生 MQ 消息队列

使用 rocketmq-spring-boot-starter 来配置、发送和消费 RocketMQ 消息

Apache RocketMQ

Vibe Coding火了,人人都是程序员?

禅道项目管理

人工智能 软件开发 AI编程 禅道项目管理软件 vibe coding

道路表面缺陷数据集(裂缝/井盖/坑洼)(6000张图片已划分、已标注)|适用于YOLO系列深度学习分类检测任务【数据集分享】

申公豹

人工智能

TRAE cue 迎来月度最大更新,模型能力以及时延大幅优化

火山引擎开发者社区

Trae

KaiwuDB 邀你共赴 DTCC2025 数据库盛会

KaiwuDB

数据库 DTCC

全球社交媒体监控未来趋势:从监测走向预测与引导

沃观Wovision

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