看到API中的檢查期望並不罕見,其中最着名的示例之一是IOException
Closeable.close()
。經常處理這個異常真的讓我很煩惱。更令人討厭的例子是我們的一個項目。它由多個組件組成,每個組件聲明特定的檢查異常。這個問題(在我看來)是,在設計時它並不完全知道某些例外會是什麼。因此,例如,組件Configurator
宣稱爲ConfiguratorExeption
。當我問爲什麼不只是使用未檢查的異常時,我被告知我們希望我們的應用程序是健壯的,不會在運行時造成衝擊。但它是一個弱論據,因爲:在外部API中使用檢查的異常是個好主意?
- 大多數這些例外有效地使應用程序無法使用。是的,它不會炸燬,但它不能使任何東西泄漏與消息日誌。
- 這些例外情況並不具體,並且實際上意味着「發生了不良事件」。客戶應該如何恢復?
- 事實上,所有恢復都由日誌記錄異常組成,然後吞下它。這在大型
try-catch
聲明中執行。
我想,這是一個反覆出現的模式。但是仍然檢查異常在API中被廣泛使用。這是什麼原因?是否有某些類型的API更適合於檢查異常?
但是,例如,我懷疑close()上的'IOException'是客戶端可以操作的_always_。根據我的經驗,這往往是不可行的。 – Rorick 2010-07-28 21:02:24
你讓我的觀點是,這是Sun API的問題,而不是我的建議:-) – 2010-07-29 05:14:18