2015-12-16 110 views
-1

我有一個名爲數據庫的類已定義,並在其字段中包含一些數據。我可以使用序列化來實現嗎?

現在,我創建一個類的對象作爲

Database d1 = new Database(); 

現在,我改動了D1的那些數據值,這樣,每當我創建數據庫的另一個目的是說「數據庫D2」,這個對象有數據的更新值。這意味着,我們需要能夠使用該類的對象來更改類定義。

這可以實現嗎?

+1

問題的標題('Serialization')是一種從/ Stream(s)讀/寫Object的機制。你的問題的主體似乎是關於實施[淺拷貝](http://stackoverflow.com/q/184710/2970947)。你想做什麼? –

+0

我想使用Static關鍵字? –

回答

2

我想你可能想要實現在Java代碼中一個copy constructor,你可以這樣做:

class Database{ 

    Filed field; // some field 

    Database(){ 
    } 

    Database(Database db){ // copy constructor 
     this.field = db.field.clone(); 
    } 
} 

Database d2 = new Database(d1)

然後D2將不得不D1所有提起更新。

0

「這意味着,我們需要能夠使用該類的對象來更改類定義。」

真的嗎?您不要通過更改類定義來更改類實例字段中的值。類定義是...源代碼/編譯的字節碼。

但是,如果您改變了類定義,您很可能會發現新版本的類無法反序列化使用舊版本類序列化的實例。 (詳情取決於這些變化的確切性質...)

更一般地,Java序列化是不是數據庫的一個很好的選擇:

  • 它是緩慢的,
  • 它不是增量(如果您加載/保存整個數據庫)
  • 它不適合(如果要加載整個數據庫到內存)
  • 它不支持查詢(除非你整個數據庫加載到內存並執行q如果您需要更改「架構」,則遇到許多問題;如果您需要更改「架構」,則會遇到許多問題。即您正在序列化/反序列化的類。

但模了這些限制,它會工作;即它是「可實現的」。


如果你是真的在談論如何改變你的內存Database對象的狀態,或如何從現有的出來,然後創建一個新的副本:

  • 執行/使用干將,Database類中的setter和/或其他方法,
  • 實現複製構造函數,工廠方法或clone方法,該方法將Database對象狀態...複製到所需的任何深度。

所有非常容易實現的(簡單的「Java 101」級別編程),但不一定是個好主意。

相關問題