亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

何時拋出異常?

何時拋出異常?

波斯汪 2019-06-13 16:54:57
何時拋出異常?我為我的應用程序所不期望的每一個條件創建了異常。UserNameNotValidException, PasswordNotCorrectException等。然而,有人告訴我,我不應該為這些條件設置例外。在我的UML中,這些是主流的異常,那么為什么不應該是異常呢?是否有創建異常的指導或最佳實踐?
查看完整描述

3 回答

?
郎朗坤

TA貢獻1921條經驗 獲得超9個贊

我個人的指導方針是:當發現當前代碼塊的基本假設為假時,拋出異常。

示例1:假設我有一個函數,它應該檢查任意類,如果該類繼承List<>,則返回true。這個函數提出一個問題:“這個對象是列表的后代嗎?”這個函數不應該拋出異常,因為它的操作中沒有灰色區域-每個類都繼承或不繼承List<>,所以答案總是“或”否“。

示例2:假設我有另一個函數,它檢查一個列表<>,如果它的長度大于50,返回true;如果長度小于50,則返回false。這個函數會問這樣一個問題:“這個列表有50多個項目嗎?”但是這個問題做了一個假設-它假設它給出的對象是一個列表。如果我給它一個空,那么這個假設是錯誤的。在這種情況下,如果函數返回任一千真萬確如果是假的,那么它就違反了自己的規則。函數不能返回什么都行并聲稱它正確地回答了這個問題。所以它不會返回-它會拋出一個異常。

這與“滿載問題”邏輯謬誤。每個函數都會問一個問題。如果它所提供的輸入使這個問題成為一個謬誤,那么拋出一個異常。這一行很難用返回void的函數繪制,但底線是:如果函數對其輸入的假設被違反,它應該拋出異常,而不是正常返回。

這個等式的另一面是:如果你發現你的函數經常拋出異常,那么你可能需要改進它們的假設。


查看完整回答
反對 回復 2019-06-13
?
萬千封印

TA貢獻1891條經驗 獲得超3個贊

因為它們是正常發生的事情。異常不是控制流機制。用戶經常會錯誤地使用密碼,這也不是一個例外情況。例外應該是一件非常罕見的事情,UserHasDiedAtKeyboard類型情況。


查看完整回答
反對 回復 2019-06-13
?
侃侃無極

TA貢獻2051條經驗 獲得超10個贊

我的小指南深受“代碼完整”一書的影響:

  • 使用異常通知不應忽略的事情。
  • 如果錯誤可以在本地處理,則不要使用異常
  • 確保異常處于與其他例程相同的抽象級別。
  • 應該為

    真正的例外.


查看完整回答
反對 回復 2019-06-13
  • 3 回答
  • 0 關注
  • 706 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號