国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(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ó)家法律
徐水县| 桂平市| 安福县| 宁晋县| 沽源县| 府谷县| 武鸣县| 柘荣县| 赣州市| 景谷| 罗江县| 龙游县| 环江| 巴南区| 西丰县| 甘洛县| 依安县| 西充县| 土默特右旗| 郑州市| 图木舒克市| 华容县| 内丘县| 河间市| 许昌市| 勃利县| 平昌县| 花莲县| 濉溪县| 丰顺县| 玛多县| 岢岚县| 苏尼特左旗| 子洲县| 自治县| 巨鹿县| 阿瓦提县| 将乐县| 泰安市| 东方市| 武胜县|