我是一名C++開發人員,我非常喜歡java中的checked和unchecked異常。 C++中的異常規範簡直不好,這就是爲什麼沒有人使用它。我喜歡這個檢查異常,我有一個問題,讓我們有這樣的接口:檢查異常規範和策略模式
public interface Warehouse {
MyStuff fetch(int id);
}
倉庫可以用不同的方式來實現的:文件,數據庫或內存(用於測試模擬對象)。
現在,如果我想實現使用文件,我不能嘗試打開該方法中的文件,否則我的簽名將改變,我的班級將不再實現該界面。此外,如果我有另一個類與另一個檢查異常,所有其他現有的實現將受到影響。
我可以看到兩個解決方案:
趕上檢查的異常,並拋出另一個自定義運行時異常。我不認爲這是一個好的解決方案,爲什麼用戶應該捕獲一個運行時異常,指出在已經有標準和經過檢查的方式下文件丟失。
在實現類的構造函數中執行整個作業,並使提取函數無法拋出。我喜歡這種方式,對象既存在又有效,或者不存在。這種方法唯一的缺點是我們無法實施懶惰評估;我們需要在構造函數中讀取和解析文件,即使沒有人會使用該對象。這不是有效的。
我錯過了什麼嗎?有沒有更好的方法來避免這個問題?
Uhoh,檢查與未經檢查的例外。這會產生很多討論。這在Java開發人員中是一個相當宗教的話題。 – tobiasbayer 2011-12-21 11:45:46