速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

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

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

关注

评论 1 条评论

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

TIDB v7.1 reource control资源管控特性体验贴

TiDB 社区干货传送门

版本测评 7.x 实践

资源池化:多租户与数据库整合解决方案

TiDB 社区干货传送门

新版本/特性解读 数据库架构设计

基于驱动因素的全面预算管理方式

智达方通

智达方通 全面预算管理 业财驱动 驱动因素

无类教育完善内训体系,开启校企合作新篇章

Geek_2d6073

边缘云特点、应用实践和发展趋势浅析

天翼云开发者社区

边缘云

TiDB 多租户方案和原理

TiDB 社区干货传送门

TiDB 底层架构 新版本/特性解读 7.x 实践

在找稳定的企业级数据云平台?奇点云DataSimbaR4.9 LTS发布

Geek_2d6073

探索To-D,落地好大夫效能平台

方勇(gopher)

DevOps SRE 效能平台

程序员搞开发的时候,心态真的不稳

伤感汤姆布利柏

数字先锋|云上医院长什么样?宁夏固原中医医院带你一探究竟!

天翼云开发者社区

云计算

关于 3.0 和 2.0 的数据文件差异以及性能优化思路

爱倒腾的程序员

从零开始初识机器学习 | 京东云技术团队

京东科技开发者

人工智能 机器学习 企业号 6 月 PK 榜

微服务架构的重要性:现代应用开发的关键趋势

2756

微服务架构 微服务、

慧博云通加入飞桨技术伙伴计划,共同推动企业 AI 应用创新

飞桨PaddlePaddle

人工智能 百度 paddle 飞桨 百度飞桨

南通市属于几线城市?本地有正规等保测评机构吗?

行云管家

等级保护 等保测评 南通

微服务之道:8个原则,打造高效的微服务体系

不在线第一只蜗牛

微服务 微服务架构

IPQ9574 IPQ9554 what's the difference?|WIFI7 Solution|Wallys

wallyslilly

ipq9554 ipq9574

TICDC 数据同步至 MySQL初体验

TiDB 社区干货传送门

迁移

发送Tidb告警信息到企业微信群实践

TiDB 社区干货传送门

监控

OpenResty 安装

流火

带你了解爆火的AI框架-LangChain

派大星

WEB系统安全之开源软件风险使用评估

天翼云开发者社区

开源 Web

高考成绩都出来了,你的秒杀系统如何了?

冰河

并发编程 多线程 高并发 协程 秒杀系统

【TiDB v7.1.0】资源管控调研及评测

TiDB 社区干货传送门

7.x 实践

TiDB 升级利器(参数对比)——TiDBA

TiDB 社区干货传送门

7.x 实践

如何用smardaten90天快速开发并上线智慧空间loT物联平台?

热爱编程的小白白

干货|三个维度详解 Taier 本地调试原理和实践

袋鼠云数栈

开源 前端

记一次Native memory leak排查过程 | 京东云技术团队

京东科技开发者

native 企业号 6 月 PK 榜 memory leak

零样本视频生成无压力,基于飞桨框架实现Text2Video-Zero核心代码及依赖库

飞桨PaddlePaddle

人工智能 百度 paddle 飞桨 百度飞桨

来了,kubesphere轻松搭建redis

夜栩

后端 docker image KubeSphere

券商网络信息安全启动三年计划圈重点

原点安全

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