2013-11-22 87 views
2

我正在創建一個系統來保存和加載磁盤中的對象。我製作了一個包含讀取和寫入數據的方法的接口,該接口可以正常工作。我的程序中的任何需要保存的內容都可以實現此接口,並使用它來保存和讀取需要使用的任何數據。問題在於在從磁盤讀取對象時實際創建對象。現在,我保存對象的類名,然後在閱讀它們時使用Class.forName(savedClassName).newInstance();實例化它們。這個問題需要任何Savable類有一個無參數的構造函數,但沒有辦法強制在接口本身。所以如果我或者和我一起工作的人嘗試創建一個Savable對象,但忘記包含一個無參數的構造函數,那麼將會有一些例外的方式,我們很可能甚至不會在很長時間內發現它們。我無法解決這個問題,因爲似乎沒有辦法使用接口來要求可預測的方法來構造一個對象。我在從Java磁盤加載對象時遇到問題

+0

您是否嘗試過使用抽象類來代替(或加上)接口? – Martin

+1

爲什麼你沒有使用Serializable和Object輸入/輸出流? – Ash

+0

@Martin:抽象類將是相當嚴格的(沒有其他類層次允許) – Ash

回答

0

如何禁止沒有默認構造函數的類被保存。這樣,任何人嘗試加載的唯一類是已保存的類,因此具有默認構造函數的類。

+1

這是減少可能的損害的好方法,但它仍然不能解決您必須記住每次實施Savable時都要包含無參數構造函數的問題。 – ChemicalRocketeer

0

您可能會創建一個抽象單元測試,測試默認構造函數(而不是其他)的存在並繼承您的單元測試,這可能比您的層次結構中的抽象類限制性更少,並且應該指示構造函數丟失。