AICon上海|与字节、阿里、腾讯等企业共同探索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:301595
用户头像

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

关注

评论 1 条评论

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

不懂乐理和五线谱也能快速入门电子音乐制作!用FL Studio 搞音乐创作有时候就是这么简单!

懒得勤快

netty系列之:搭建客户端使用http1.1的方式连接http2服务器

程序那些事

Java Netty 程序那些事 http2 11月日更

APP上跑小程序,一箭双雕

Speedoooo

ios开发 APP开发 Andriod开发

WeTest六周年 | 匠心不改 初心不变

WeTest

漏洞深入分析-2021

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 安全漏洞

这都是什么

冇先生

IDEA免费激活至2099年教程,亲测可用

Tom弹架构

Java 工具 IDEA

Android技术分享| Android WebRTC 开启H264软件编解码教程

anyRTC开发者

android 音视频 WebRTC ffmpeg H264

03 K8S之网络互联通信

穿过生命散发芬芳

k8s 11月日更

云小课|三大灵魂拷问GaussDB(DWS)数据落盘安全问题

华为云开发者联盟

安全 云小课 GaussDB(DWS) 数据仓库服务 数据落盘安全

惊艳11月!日更挑战你准备好了么!?

InfoQ写作社区官方

11月日更 热门活动

毕业设计项目 电商秒杀系统

面向对象的猫

拍乐云基于AV1的实时视频系统技术实践 | 2021 LiveVideoStackCon 演讲回顾

拍乐云Pano

音视频 WebRTC RTC

OCR的工作原理和应用场景

澳鹏Appen

人工智能 机器学习 OCR 训练数据 文本识别

架构实战营 - 毕业总结

燕燕 yen yen

架构训练营

【设计模式】第九篇 - 适配器模式 - 你多大鞋,我多大脚

Brave

设计模式 适配器模式 11月日更

架构实战营 毕业总结

一雄

架构实战营 毕业总结

拥抱时序数据库,构筑IoT时代下智慧康养数据存储底座

华为云开发者联盟

数据 IoT 时序数据库 华为云 智慧康养

增量编译:让小程序包编译速度提升11倍!

Speedoooo

容器 ios开发 APP开发 Andriod开发

闻香识代码,什么是衡量代码质量的终极标准?

Zilliz

Java 代码质量 JavaScrip

网易智企斩获“2021全球新经济卓越成就奖”两项大奖

网易云信

大数据 云通信 通信云

CANN5.0黑科技解密 | 别眨眼!缩小隧道,让你的AI模型“身轻如燕”!

华为云开发者联盟

AI CANN 昇腾 模型压缩 模型缩小隧道

架构实战营模块毕业总结

老猎人

架构实战营

CSS架构之Acss层(中)

Augus

CSS 11月日更

拥有3000多万用户的录屏软件,到底强在哪儿?

淋雨

Camtasia

实现连续测试,要做的事情【译】

FunTester

敏捷 自动化 持续集成 FunTester 连续测试

Linux 系统资源查看及硬件故障排查(qbit)

qbit

操作系统 故障 资源

我凭借这份pdf,最终拿到了阿里,腾讯,京东等八家大厂offer

Java 编程 程序员 面试

30K成功入职京东:拿到京东offer经验分享「面试经历+面试真题」

Java redis spring 程序员 JVM

毕业总结

面向对象的猫

毕业总结

如何在 Spring 中使用事件

码语者

Spring Boot Event 事件

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