簡體   English   中英

已檢查與未檢查異常統計

[英]checked vs unchecked exception statistics

在厭倦了說服同事以爭論的方式放棄檢查異常之后,我正在尋找任何統計數據,這些統計數據將說明有多少程序員喜歡檢查異常,以及有多少程序員不喜歡使用檢查異常。
網絡上是否有這樣的調查/投票/統計數據?

如何將它們指向Java教程:

http://download.oracle.com/javase/tutorial/essential/exceptions/runtime.html

其中包括最后一行,清楚地總結了關鍵點:

這是底線准則:如果可以合理地預期客戶端將從異常中恢復,則將其設置為已檢查的異常。 如果客戶端無法采取任何措施來從異常中恢復,請將其設置為未經檢查的異常。

從C ++派生其通用異常處理概念的許多語言和框架存在的一個問題是,太多的事情被有效地編碼為異常類型。 , and if there were a way to concisely specify that particular checked exceptions should get rethrown as unchecked. 拋出 ,並且有一種方法可以簡潔地指定應該使用特定的檢查異常, 檢查異常將是一個好概念重新拋出為未經檢查。 不幸的是,Java要求給定類型的任何異常都必須始終按檢查類型拋出,或始終按未檢查類型拋出,並且取決於類型,並且沒有提供方便或簡潔的方式來將已檢查異常映射到未檢查異常。 取而代之的是,它使檢查異常作為檢查異常滲入最方便,這增加了“麻煩”因素,同時降低了其有用性。

如果在拋出站點上實現了檢查異常,並且處理不想要的檢查異常的正常方法是將其轉換為未檢查異常,則可以確保通過拋出特定檢查異常來指示特定故障條件的方法只會拋出在“希望”報告特定故障時檢查異常; 如果在方法執行期間發生了相同類型的異常,這是無法預料的,​​則它將轉換為未經檢查的異常。 這樣的“檢查異常”模型可能有用,並且還可以導致比普通異常更有效的代碼(因為檢查異常必須在引發它們的例程的直接調用程序中進行處理,因此需要進行大量堆棧展開和堆棧跟蹤)可以跳過正常的異常處理)。 不幸的是,Java的“檢查異常”不能那樣工作。

如果進行這樣的調查,那么您的牛郎們是否會認為網絡上的不良程序員比不良程序員更多,並且他們希望更多不良程序員投票贊成未經檢查的異常? 因此,它並不能真正解決您的問題。

兩個數據點使我信服:

  • afaik在任何地方都沒有其他語言實現者從Java復制過檢查的異常。 就其他語言而言,這是一次徹底的失敗。 如果該功能有什么好處,那么有人會將該功能用於他們的新語言。

  • 從Spring到Hibernate再到Java EE,框架編寫者之間發生了廣泛的變化,用非檢查異常代替許多檢查異常。

除此之外,您還可以嘗試查看項目的代碼,並找到有關檢查異常如何導致異常被吞噬或無處不在的“引發異常”子句的問題的示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM