欢迎光临散文网 会员登陆 & 注册

DELOG 10.10 理解异常 & 为什么要设计CE和RE?& Kotlin中是怎么处理的?

2021-10-10 16:25 作者:房顶上的铝皮水塔  | 我要投稿

异常的分类:


Java中的异常可以从两个方面进行分类:

1. 继承关系上:通常将RuntimeException的子类和Error类的子类称作unchecked exception。其他的称作checked exception。

2. 运行结果上:Java的异常分为checked exception和 unchecked exception。checked exception (CE)是程序预期的一部分,而unchecked exception(runtime exception,RE)却不是。


设计CE和RE的目的

CE:表示当前的函数/方法返回的结果可能存在两种,一种是正常返回的结果,一种是异常。之所以需要这样设计,是一种自然而然的合约。程序的设计者在方法签名中抛出异常(可能会发生的异常),使用这就应该做出处理。

借助知乎的这篇回答的解释:Java设计出checked exception有必要吗? - BachScript的回答 - 知乎 https://www.zhihu.com/question/30428214/answer/852807268


RE:反映的是一种意料之外的状况。但是RE也是必须的,如果不使用RE,在调用链上,调用链的上游抛出了异常,下游就需要知道如何处理,并且上下游的模块也会因为这个异常被耦合到一起。


Kotlin中是如何处理的呢?

Kotlin中都是unchecked 异常,因为总是检查异常会降低生产力,但是却没有明显提高代码质量。

而且Kotlin通过类型机制实现了更好的【类型匹配】:

如果按照上面的文章中的union type来理解,这里的a的类型应该是Int|NumberFormatException,但是Kotlin中支持try表达式,所以当真正发生异常的时候可以将a的值设为空值。


总结:

  1. CE和RE都是Java异常机制的一部分。CE更像是一种代码规范,表示返回的结果类型要么事异常要么就是指定的返回类型。

  2. RE在运行过程中发证的异常,也是必须的为了避免耦合性。

  3. 反正RE不能避免,而且CE没有显著提升代码质量,所以Kotlin也没有支持CE。但是在真正遇到可能出现的异常的时候,还是可以进行try-catch。


参考内容:

浅谈Kotlin的Checked Exception机制:

https://segmentfault.com/a/1190000025161951

官方文档:

https://www.kotlincn.net/docs/reference/exceptions.html

DELOG 10.10 理解异常 & 为什么要设计CE和RE?& Kotlin中是怎么处理的?的评论 (共 条)

分享到微博请遵守国家法律