写点什么

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

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

关注

评论 1 条评论

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

Apache Flink ML 2.1.0 发布公告

Apache Flink

机器学习 大数据 flink 流计算 实时计算

【排队助手】投屏模式-使用指南

天天预约

小程序 SaaS应用 生活服务工具 排队工具

软件开发中的DevOps

力软低代码开发平台

《第四期(2021-2022)传统行业云原生技术落地调研报告——央国企篇》正式发布

York

云原生 数字化转型 国企 央企

小程序在电商中的优势

Geek_99967b

小程序

Taro2/3做小程序开发的使用心得和方法

9527

小程序 taro

三证加持,澳鹏中国又获ISO9001及27701认证

澳鹏Appen

隐私保护 ISO 数据安全 质量检测

金融有底,赋实有数!《中国金融机构数字化转型》白皮书重磅发布

科技热闻

LeetCode-118. 杨辉三角I(java)

bug菌

Leet Code 7月月更

你不会还在用Xshell吧?这款开源的终端工具才是yyds!

了不起的程序猿

Java 工具 java程序员 后端开发

洞察数字化转型现状及未来 《中国金融机构数字化转型》白皮书发布

科技热闻

新版网络安全等级保护测评报告模板包含哪些内容?哪里可以找到?

行云管家

等保 等保测评 等保测评报告

高效实战|航空业海量日志数据的智能化分析

云智慧AIOps社区

运维 数据分析 日志分析 日志管理 运维技术

小程序在产业互联网中的作用

Geek_99967b

小程序

无声的AI:昇腾AI如何用大模型破解手语学习的难题?

脑极体

【云计算】企业上云后需要避免的几个错误

行云管家

云计算 企业上云 堡垒机

公众号关联【排队助手】小程序

天天预约

小程序 工具 SaaS设计 排队

《看完就懂系列》答应我,看完就开始用Symbol好吗?

南极一块修炼千年的大冰块

7月月更

let、var、const 的区别

7月月更

使用百度开发者工具 4.0 搭建专属的小程序 IDE

百度Geek说

ide 开发者工具

焱融全闪 X NVIDIA InfiniBand:打造 AI 时代 GPU 计算的高性能存储技术

焱融科技

存储 文件存储 分布式文件存储 全闪

直播带货源代码——直播带货系统

开源直播系统源码

直播带货源码 直播带货系统 开源源码

【排队助手】投屏模式-使用指南

天天预约

小程序 SaaS 生活服务工具 排队工具 离线提醒

java零基础入门-继承

喵手

Java 7月月更

8K字详细解析实现Redis的高可用(主从、哨兵、集群)

了不起的程序猿

Java 高可用 Redis 数据结构

龙蜥下游发行版 Alinux 和 UOS 成为 OpenSCAP 官方首批支持的国内 OS

OpenAnolis小助手

国产 龙蜥操作系统 UOS v20 OpenSCAP Alinux 2/3

【C语言】进阶指针six

謓泽

7月月更

TCP/IP协议常见漏洞类型

郑州埃文科技

TCP/IP 漏洞 IP地址

低代码如何构建支持OAuth2.0的后端Web API

葡萄城技术团队

后端 低代码 Oauth

数据分析引擎百花齐放,为什么要大力投入ClickHouse?

字节跳动数据平台

千亿IT运维市场,来到凭「效果」说话的时代

ToB行业头条

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