最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

DELOG 10.10 理解異常 & 為什么要設(shè)計(jì)CE和RE?& Kotlin中是怎么處理的?

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

異常的分類(lèi):


Java中的異??梢詮膬蓚€(gè)方面進(jìn)行分類(lèi):

1. 繼承關(guān)系上:通常將RuntimeException的子類(lèi)和Error類(lèi)的子類(lèi)稱(chēng)作unchecked exception。其他的稱(chēng)作checked exception。

2. 運(yùn)行結(jié)果上:Java的異常分為checked exception和 unchecked exception。checked exception (CE)是程序預(yù)期的一部分,而unchecked exception(runtime exception,RE)卻不是。


設(shè)計(jì)CE和RE的目的

CE:表示當(dāng)前的函數(shù)/方法返回的結(jié)果可能存在兩種,一種是正常返回的結(jié)果,一種是異常。之所以需要這樣設(shè)計(jì),是一種自然而然的合約。程序的設(shè)計(jì)者在方法簽名中拋出異常(可能會(huì)發(fā)生的異常),使用這就應(yīng)該做出處理。

借助知乎的這篇回答的解釋?zhuān)篔ava設(shè)計(jì)出checked exception有必要嗎? - BachScript的回答 - 知乎 https://www.zhihu.com/question/30428214/answer/852807268


RE:反映的是一種意料之外的狀況。但是RE也是必須的,如果不使用RE,在調(diào)用鏈上,調(diào)用鏈的上游拋出了異常,下游就需要知道如何處理,并且上下游的模塊也會(huì)因?yàn)檫@個(gè)異常被耦合到一起。


Kotlin中是如何處理的呢?

Kotlin中都是unchecked 異常,因?yàn)榭偸菣z查異常會(huì)降低生產(chǎn)力,但是卻沒(méi)有明顯提高代碼質(zhì)量。

而且Kotlin通過(guò)類(lèi)型機(jī)制實(shí)現(xiàn)了更好的【類(lèi)型匹配】:

如果按照上面的文章中的union type來(lái)理解,這里的a的類(lèi)型應(yīng)該是Int|NumberFormatException,但是Kotlin中支持try表達(dá)式,所以當(dāng)真正發(fā)生異常的時(shí)候可以將a的值設(shè)為空值。


總結(jié):

  1. CE和RE都是Java異常機(jī)制的一部分。CE更像是一種代碼規(guī)范,表示返回的結(jié)果類(lèi)型要么事異常要么就是指定的返回類(lèi)型。

  2. RE在運(yùn)行過(guò)程中發(fā)證的異常,也是必須的為了避免耦合性。

  3. 反正RE不能避免,而且CE沒(méi)有顯著提升代碼質(zhì)量,所以Kotlin也沒(méi)有支持CE。但是在真正遇到可能出現(xiàn)的異常的時(shí)候,還是可以進(jìn)行try-catch。


參考內(nèi)容:

淺談Kotlin的Checked Exception機(jī)制:

https://segmentfault.com/a/1190000025161951

官方文檔:

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

DELOG 10.10 理解異常 & 為什么要設(shè)計(jì)CE和RE?& Kotlin中是怎么處理的?的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
家居| 吉水县| 东兰县| 赣州市| 武平县| 富阳市| 汤原县| 蒙阴县| 察雅县| 扶沟县| 饶平县| 江孜县| 中西区| 育儿| 盘锦市| 溧阳市| 沙雅县| 新竹县| 越西县| 广东省| 涪陵区| 连州市| 夏邑县| 福清市| 安塞县| 遵义市| 重庆市| 若尔盖县| 望谟县| 恩施市| 铜陵市| 峨眉山市| 汽车| 富民县| 谷城县| 望奎县| 邵阳县| 安平县| 甘孜县| 公主岭市| 吉安市|