大厂Data+Agent 秘籍:腾讯/阿里/字节解析如何提升数据分析智能。 了解详情
写点什么

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

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

关注

评论 1 条评论

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

从开发转到安全渗透工程师,是我做的最对的决定

网络安全学海

黑客 网络安全 信息安全 渗透测试· 漏洞分析

多用as少用强制类型转换

喵叔

7月日更

鉴释首席运营官赵科林:质量第一思维模式

鉴释

代码 安全编码

优秀!百度技术官甩出SpringBoot全栈小册,GitHub星标92.5k

Java 编程 程序员

好未来 x StarRocks:全新实时数仓实践,深入释放实时数据价值

StarRocks

数据库 flink 实时数仓 好未来 StarRocks

为什么开发人员都不愿写 API 文档?

狐哥说技术

Postman Apifox 接口文档 接口管理

Java的内存区域是如何划分的?

卢卡多多

内存 Java内存模型 7月日更

gopher成长之路(一):致三年前的我

非晓为骁

个人成长 架构师 全栈工程师 Go 语言 努力

挖掘机哪家强?不找蓝翔找AI!

脑极体

Java Flight Recorder - 事件机制详解

毕昇JDK社区

学习资源:图像处理从入门到精通

Jackpop

注意:线程的执行顺序与你想象的可能不一样!

冰河

Java 程序员 并发编程 多线程 异步编程

结构化流-Structured Streaming(八-上)

Databri_AI

spark 查询引擎 结构化思维

声网Agora 教育 aPaaS 灵动课堂升级:UI与业务逻辑分离,界面、功能自定义更灵活

声网

在线教育 网络

主存中存储单元地址的分配

朱华

计算机组成原理 计算机专业

有图,有代码,好理解,学习内存管理,mmap机制

奔着腾讯去

Linux 内存管理 Mmap 内存映射

Linux之diff命令

入门小站

Linux

基于机器学习的语音编解码器声网Agora Silver:支持超低码率下的高音质语音互动

声网

RTE 技术详解 音频体验 AI Codec

盘点Java线程池配置的常见误区,你中了几个?

北游学Java

Java 多线程

希望这是一篇让你对vim产生兴趣的文章

Jackpop

手写归并排序算法

实力程序员

程序员 C语言 排序算法 实力 编程实战

Discourse 云平台安装

HoneyMoose

现代分布式架构设计原则-互操作性

余先生

RESTful 接口 REST API

Python调试神器之PySnooper

Jackpop

四色建模法

escray

学习 极客时间 7月日更 如何落地业务建模

图计算之开局女朋友跑了

Zhuan

图算法 图计算 networkX GraphScope

下一代5G计算终端,正在你我的案头苏醒

脑极体

看完这篇 HTTPS 文章,再也不怕面试官这么问我了

HelloWorld杰少

https 对称加密 HTTP 非对称加密、 7月日更

在线XML转HTML工具

入门小站

工具

为什么BAT的程序员能月薪 20k ,而你一个月只能拿 6K 的低保?差别就在这!

白亦杨

Java 编程 程序员

🌏【架构师指南】分布式技术知识点总结(数据处理)

码界西柚

架构 数据 7月日更

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