第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

空參數(shù)的IllegalArgumentException或NullPointerException?

空參數(shù)的IllegalArgumentException或NullPointerException?

哆啦的時光機 2019-06-29 15:07:40
空參數(shù)的IllegalArgumentException或NullPointerException?對于一個屬性,我有一個簡單的setter方法null不適合此特定屬性。在這種情況下,我總是心煩意亂:我應(yīng)該扔一個IllegalArgumentException,或NullPointerException?從javadocs來看,兩者似乎都是合適的。有什么可理解的標準嗎?或者這僅僅是你想做的事情中的一件,兩者都是正確的嗎?
查看完整描述

3 回答

?
冉冉說

TA貢獻1877條經(jīng)驗 獲得超1個贊

好像IllegalArgumentException如果你不想null為允許的值,并且NullPointerException如果你試圖使用一個變量null.


查看完整回答
反對 回復 2019-06-29
?
牛魔王的故事

TA貢獻1830條經(jīng)驗 獲得超3個贊

你應(yīng)該用IllegalArgumentException(IAE),而不是NullPointerException(NPE)出于以下原因:

首先,NPE JavaDoc顯式列出NPE合適的案例。注意,所有這些都會被拋出。由運行時什么時候null使用不當。相反,IAE JavaDoc再清楚不過了:“拋出表示方法已通過非法或不適當?shù)恼撟C。”是的,就是你!

其次,當您在堆棧跟蹤中看到NPE時,您會假設(shè)什么?可能有人取消了null..當您看到IAE時,假設(shè)堆棧頂部的方法調(diào)用者傳遞了一個非法值。再一次,后一種假設(shè)是正確的,前者具有誤導性。

第三,由于IAE顯然是為驗證參數(shù)而設(shè)計的,所以您必須假設(shè)它是默認的異常選擇,那么為什么要選擇NPE呢?當然不是針對不同的行為-您真的期望調(diào)用代碼能夠單獨捕獲NPE和IAE,并因此做一些不同的事情嗎?您是否試圖傳遞更具體的錯誤消息?但是,您可以在異常消息文本中這樣做,就像對于所有其他不正確的參數(shù)一樣。

第四,所有其他不正確的參數(shù)數(shù)據(jù)都將是IAE,那么為什么不一致呢?為什么這是非法的null它是否如此特殊,與所有其他類型的非法爭論相比,它應(yīng)該有一個單獨的例外?

最后,我接受其他答案的論點,即JavaAPI的部分以這種方式使用NPE。但是,JavaAPI與從異常類型到命名約定的所有內(nèi)容都不一致,所以我認為盲目地復制JavaAPI(您最喜歡的部分)并不是一個足夠好的論據(jù),不足以勝過這些其他考慮。


查看完整回答
反對 回復 2019-06-29
?
紅顏莎娜

TA貢獻1842條經(jīng)驗 獲得超13個贊

標準是將NullPointerException..一般正確的“有效Java”在項目42(第一版)、項目60(第二版)或項目72(第三版)“贊成使用標準例外”中對此作了簡要討論:

“可以說,所有錯誤的方法調(diào)用都歸結(jié)為非法參數(shù)或非法狀態(tài),但其他異常通常用于某些類型的非法參數(shù)和狀態(tài)。如果調(diào)用方在某個參數(shù)中傳遞空,而該參數(shù)禁止空值,則約定要求拋出NullPointerException,而不是IllegalArgumentException?!?/trans>


查看完整回答
反對 回復 2019-06-29
  • 3 回答
  • 0 關(guān)注
  • 853 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號