2011-05-30 82 views
1

我有一個類管理磁盤上的文件,保存以xml形式的reoport。因爲它使用JAXB(但可以使用任何其他xml庫,它不相關),它可以生成jaxb(或任何其他xml庫)檢查異常。
爲了保留封裝,我應該將我的原始庫異常「轉換」爲我的庫的邏輯級別。但我不想增加很少,很少相關課程的班級數量。 由於類是文件相關的,我認爲IOException對於這種情況是足夠的。java異常保存封裝示例

public void save(File file) throws IOException { 
    try{ 
     JAXBContext jc = JAXBContext.newInstance(ArchiveInfo.class); 
     Marshaller m = jc.createMarshaller(); 
     m.marshal(this, file); 
    } catch (JAXBException jexc) { 
     throw new IOException(jexc); 
    } 
} 
  1. 你同意這種解決方案達成一致,是一個很好的權衡簡單性和正確性之間?
  2. 我很幸運,因爲我發現了一個合適的例外。如果我不是,我必然會定義自己的異常,因爲使用Exception類不是很好的設計。 (導致調用者捕獲異常,隱式捕獲RuntimeException)。 運行時異常在RuntimeException類中有一個共同的祖先,而所有檢查的異常沒有嗎?它不是異常結構中的異常嗎?

回答

2

1)我同意你的看法,並傾向於這樣做:大多數情況下,手動保存大量的異常類型都是無用的。您在應用程序的更高級別所需的所有內容都足夠精確,能夠爲用戶提供有意義的錯誤。在你的情況「文件無法讀取」,因此IOException是確定的。

2)是的,它是Java中Exception機制長期存在的缺陷......有人甚至會說Java中的Exceptions機制在其根目錄中存在缺陷(檢查的異常在大多數時間被濫用)。無論如何,在你的情況下,我有時會使用catch-it-all InvalidStateException或IllegalArgumentException。當然,如果你需要更精確的意義傳達到應用程序的上層,你總是可以創建自己的例外。但請記住:親吻:)