写点什么

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

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

关注

评论 1 条评论

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

闲鱼商品详情API技术文档

tbapi

闲鱼API 闲鱼商品详情接口 闲鱼数据采集

活动租赁互动LED舞池特点和场景使用

Dylan

活动 LED LED display LED显示屏 LED屏幕

SAKE:基于激活导向的知识编辑技术

qife122

知识编辑 最优传输

彩讯股份战略投资中科酷原,布局量子计算产业

彩讯股份300634

如何安装CST的Linux版本

思茂信息

仿真 Linux、 CST Studio Suite

闲鱼商品列表API技术文档

tbapi

闲鱼API 闲鱼商品详情接口 闲鱼商品列表接口 闲鱼数据采集

行业预测:海外舆情监测系统将成为下一个出海必备工具

沃观Wovision

出海企业 海外舆情监控 沃观Wovision 舆情监测系统

哈尔滨等保测评:为什么必须做?不做后果有多严重?

等保测评

AI口语APP的功能优化

北京木奇移动技术有限公司

软件外包公司 APP外包公司 AI英语口语

Gemini 2.5模型重大升级:更智能的AI技术

qife122

深度学习 AI

“上海有AI”,一座城市的智惠答卷

Alter

LazyLLM 教程 | 第 2 讲:10 分钟上手一个最小可用 RAG 系统

商汤万象开发者

直击WAIC | 百度袁佛玉:加速具身智能技术及产品研发,助力场景应用多样化落地

百度Geek说

哈尔滨等保测评:3分钟读懂核心要点

等保测评

能源行业指标体系建设与 AI 数智化落地:技术方案 + 实践路径

袋鼠云数栈

人工智能 数字化转型 数据治理 能源行业 数据指标体系

区块链U卡APP的安全性

北京木奇移动技术有限公司

区块链开发 软件外包公司 web3开发

抖音集团基于Paimon的流式数据湖应用实践

Apache Flink

大数据 flink 实时计算 paimon

基于 Amazon Nova 实现优化呼叫中心导航场景

亚马逊云科技 (Amazon Web Services)

Hello World背后藏着什么秘密?一行代码看懂Java的“跨平台”魔法

poemyang

编译原理 字节码 Java虚拟机

企业落地Data Agent,一共需要几步?

字节跳动数据平台

大数据 Data Agent 数据智能体

微帧GPU视频硬编优化引擎:面向人工智能大时代的AI算法与硬编协同优化方案

微帧Visionular

KWDB 分布式部署过程与 deploy.sh cluster -i 命令分析

KaiwuDB

不要傻呵呵等金九银十了!

王磊

哈尔滨等保测评:个人信息保护与数字安全防线

等保测评

轻松搞定!KaiwuDB单节点裸机部署(二进制安装包版)

KaiwuDB

2026全球人工智能终端展

AIOTE智博会

人工智能展会 人工智能博览会 人工智能展 人工智能览会 深圳人工智能展

[鸿蒙征文] 小支同学的学习笔记《HarmonyOS 开发入门:构建首个 HelloWorld 应用》

巴库一郎

WAIC·2025|中国移动发布"灵犀2.0"智能体,彩讯股份作为核心伙伴共启AI Agent新篇章

彩讯股份300634

区块链U卡APP的运维

北京木奇移动技术有限公司

彩讯股份入选法制日报社“2024政法智能化建设创新方案”

彩讯股份300634

一个普通IT人的20年奋斗:从小白到编程教育布道者

编程启航栈

技术人成长

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