有時候,你想隱藏的方法的實施細則或改善 問題的抽象級別,以便它更有意義的方法的調用者 。爲此,您可以攔截原始異常,並用 替代更適合於解釋問題的自定義異常。
以一個從文本文件加載所請求的用戶詳細信息的方法爲例。該方法假設存在一個以用戶ID和後綴「.data」命名的文本文件。當該文件實際上不存在時,拋出FileNotFoundException沒有多大意義,因爲每個用戶的詳細信息都存儲在文本文件中的事實是該方法內部的實現細節。所以這個方法可以用一個解釋性的消息將原始的異常封裝在一個自定義異常中。
與顯示的代碼不同,最佳做法是通過將原始異常作爲新異常的InnerException屬性加載來保留原始異常。這意味着如果有必要,開發人員仍然可以分析潛在的問題。
當你創建一個自定義異常,這裏是一個有用的清單:
•查找傳達爲什麼異常被拋出,並確保該名稱以單詞「異常」結尾的好名字。
•確保您實現了三個標準異常構造函數。
•確保使用Serializable屬性標記異常。
•確保您實現了反序列化構造函數。
•添加任何可能幫助開發人員更好地理解和處理異常的自定義異常屬性。
•如果您添加任何自定義屬性,請確保您實現並重寫GetObjectData以序列化您的自定義屬性。
•如果添加任何自定義屬性,請重寫Message屬性,以便您可以將屬性添加到標準異常消息。
•請記住使用自定義異常的InnerException屬性附加原始異常。
我理解是否正確 - 沒有必要處理重新拋出的異常? – chester89 2008-11-26 11:03:51
我的意思是這樣的:如果你有一段代碼無法處理異常(即,你希望你的調用者來處理它),你有兩個選擇:1.不要抓住它; 2.抓住它,記錄在某個地方,然後重新拋出它。通過重新推出,呼叫者看起來好像根本沒有被發現。 – 2008-11-27 05:04:22