写点什么

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

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

关注

评论 1 条评论

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

图书馆预约小程序开发多少钱?

ALVIS

益题库小程序找谁开发??

ALVIS

Go- 包的制作

HelloBug

Go 语言 包的制作

去哪儿网库存搜索在高并发场景下的探索

Qunar技术沙龙

技术 高并发 投票机制

新零售商城怎么开发??

ALVIS

27岁到来之际,我在阿里实现了年薪40W+的小目标

编程菌

Java 编程 程序员 计算机 技术宅

区块链在供应链金融应用优势与四类常见模式

CECBC

centos7中docker安装

消失的子弹

Docker Kubernetes 云原生

绿袋环保小程序开发怎么样?

ALVIS

Go- 包的使用

HelloBug

Go 语言

SSR 技术概述

编程三昧

SSR 8月日更 服务端渲染

netty系列之:轻轻松松搭个支持中文的服务器

程序那些事

Java Netty 程序那些事

“不服跑个分?” 是噱头还是实力?| 龙蜥技术

OpenAnolis小助手

内核 Cgroups CFS调度器

织信Informat低代码平台,赋能企业数字化飞速升级,提效300%!

优秀

低代码 低代码平台

关键字transient的认识

阿志

序列化 java关键字

sql task6

橙橙橙橙汁丶

实现"双碳"目标,看下纺织业的智慧样本

百度大脑

人工智能

短短29天,应对高峰100W+访问,看浙大如何交出满分答卷

TakinTalks稳定性社区

蚂蚁金服+拼多多+抖音+天猫Java面经合集,金九银十Java开发校招社招福音!

编程susu

Java 编程 程序员 计算机 技术宅

比特币挖矿的未来只能依靠绿色能源?

CECBC

内核热补丁,真的安全么?| 龙蜥技术

OpenAnolis小助手

操作系统 内核 热替换

Linux之tr命令

入门小站

Linux

DockerHub再现百万下载量黑产镜像,小心你的容器被挖矿

腾讯安全云鼎实验室

容器 云原生 镜像

公司刚来的京东架构师:看完我写的spring笔记,甩给了我一份文档

编程菌

Java 编程 程序员 计算机 技术宅

秒懂消息队列

yuexin_tech

消息队列

06. 第三次AI浪潮:有何不同?

Databri_AI

人工智能

纷多多拼团小程序开发

ALVIS

[架构实战营]模块六作业

xyu

#架构实战营

京东三面惨遭被虐,关于redis,高并发,分布式,微服务一窍不通

编程菌

Java 编程 程序员 计算机 技术宅

撒花!!金九银十喜提offer!秋招蚂蚁金服Java研发岗四面

编程菌

Java 编程 程序员 计算机 技术宅

做了好几年Java开发,一直碌碌无为,如今靠着这份面试题跟答案,我从15K变成了30K

编程susu

Java 编程 程序员 计算机 技术宅

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