写点什么

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

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

关注

评论 1 条评论

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

oeasy教您玩转vim - 5 - # 插入模式

o

Java 反射 getClass(),最新Java大厂高频面试题

JVM调优资料

Java 程序员 面试 后端

思想的懒惰

箭上有毒

8月日更

Druid 集群方式部署 —— 选择硬件

HoneyMoose

oeasy教您玩转vim - 4 - # 深入帮助

o

oeasy教您玩转vim - 6 - # 保存修改

o

JavaScript是解释型语言--V8、JIT,Java重点知识大全

JVM调优资料

Java 程序员 面试 后端

JAVA学习(3,黑马Java全套百度云

Java 程序员 面试 后端

Java已死,有事烧纸,字节跳动历年校招Java面试真题解析

Java 程序员 面试 后端

【Flutter 专题】76 图解基本 TabBar 标签导航栏 (二)

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 8月日更

java 通过 SmbFile 类操作共享文件夹,膜拜大牛

JVM调优资料

Java 程序员 面试 后端

Java个人学习之旅(第十天),黑马程序员Java全套视频

JVM调优资料

Java 程序员 面试 后端

Fil值得投资吗?Ipfs未来价值一万一枚?

区块链 分布式存储 IPFS fil

netty系列之:netty中的Channel详解

程序那些事

Java Netty nio channel 程序那些事

Java中高级核心知识全面解析,张孝祥Java基础视频教程

Java 程序员 面试 后端

Java学习路线图(如何快速学Java,Java算法题面试

Java 程序员 面试 后端

Druid 集群方式部署 —— 从独立服务器部署上合并到集群的硬件配置

HoneyMoose

Java 集合容器篇面试题(上,Java中高级程序员进阶

JVM调优资料

Java 程序员 面试 后端

Java并发编程(实战(1),真香警告

Java 程序员 面试 后端

kubernetes入门:使用kubeadm搭建node,楼主亲测

小鲍侃java

8月日更

Java内联函数,SpringBoot集成Redis集群

Java 程序员 面试 后端

Java反射机制的那些事儿,Java基础必背知识点

Java 程序员 面试 后端

java学习-数据类型和运算符,Java社招面经分享

Java 程序员 面试 后端

Java-进阶:集合框架2,熬夜整理华为最新Java笔试题

JVM调优资料

Java 程序员 面试 后端

Java多态实现原理,分布式系统中ACID和CAP有什么区别

Java 程序员 面试 后端

Druid 集群方式部署 —— 操作系统和发行版本

HoneyMoose

10 分钟从 HTTP 切换到 HTTPS,保证个人博客安全性!

沉默王二

个人博客

手撸二叉树之路径总和

HelloWorld杰少

数据结构与算法 8月日更

java springboot,大专生面试阿里P7居然过了

JVM调优资料

Java 程序员 面试 后端

Java中高级核心知识全面解析(4),Java开发中遇到最难的问题

JVM调优资料

Java 程序员 面试 后端

Java多线程入门篇,GitHub标星1w的Java架构师必备技能

Java 程序员 面试 后端

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