【ArchSummit】如何通过AIOps推动可量化的业务价值增长和效率提升?>>> 了解详情
写点什么

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

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

关注

评论 1 条评论

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

通过题目来讲一讲计算机系统概述相关知识 3 | 计算机组成与系统结构专题

Regan Yue

计算机组成原理 10月月更

OpenSearch 文档如何进行编译

HoneyMoose

Python代码阅读(第47篇):从列表右边开始执行给定函数

Felix

Python 编程 Code Programing 阅读代码

如何成为一个更好的职业人?

石云升

学习笔记 职场经验 10月月更

科技赋能乡村振兴,农林牧渔如何“拥抱”区块链技术?

CECBC

阿里大牛首次公布Java10W字八股文面经,Github访问量破百万

Java 编程 程序员 架构 面试

永不落幕的世界智能盛会:天津市工业和信息化局与工商银行天津分行举行对接交流活动

InfoQ 天津

作业:模块一

奔奔

网易云信 6 周年|以梦为马,谱写融合通信新篇章

网易云信

云通信 通信云

中国央行数字货币DCEP——有增值空间吗?

CECBC

优雅代码技巧

十二万伏特皮卡丘

ES入门教程

阿强

elasticsearch elastic ES

AISWare AntDB亚信科技数据库产品特性解读——平滑弹性扩展(一)

亚信AntDB数据库

亚信科技

OCR+NLP 提取信息并分析,这个开源项目火了!

百度开发者中心

最佳实践 开源技术

第六届世界智能大会平行论坛提前揭晓

InfoQ 天津

[ CloudWeGo 微服务实践 - 02 ] 上手

baiyutang

golang 微服务 10月月更

【浪潮云说】直播间第十期将于今晚19:30准时开播

浪潮云

云计算

linux之zgrep查找压缩包文件文本

入门小站

Linux

文本逆序翻转工具

入门小站

工具

Android 音视频 - MediaCodec 编解码音视频

声网

android 音视频 编解码

少吃肉也能减碳排?

脑极体

虚拟人“觉醒”年,见证一场万物的进化

脑极体

030云原生之交付部署

穿过生命散发芬芳

云原生 10月月更

微信朋友圈的复杂度分析

胡颖

架构实战营

公关CRM软件助你培养长期客户关系

低代码小观

CRM 管理系统 管理工具 管理软件 公关

浅谈如何实现自定义的 iterator

hedzr

stl Iterator c++17

OCR+NLP信息抽取在金融、物流行业的应用

百度大脑

人工智能 百度

泛型原理解析(Review)

Puciu

泛型

北森CEO纪伟国:深耕HR SaaS,聚焦场景一体化

海比研究院

CODING 助力江苏高速信息实现组织敏捷与研发敏捷,领跑智慧交通新基建

CODING DevOps

研发敏捷 组织敏捷 自动化发布流程 团队目标一致性 楼宇智能化

使用 Spring Boot 和 @DataJpaTest 测试 JPA 查询

码语者

Java Spring Boot test

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