2014-01-12 19 views
0

林具有BaseRecord類,它表示一個DBRecord其中實現Serializable ..序列化和組成

我需要另一個DB觸發sortof功能,這將有自己的數據成員觸發=激活事件數據=>其中滿足時將插入一個BaseRecord

所以我的問題是

  • 我應該使用成分或繼承嗎?我更願意寫作TriggerRecord HAS-A BaseRecord,即在觸發激活事件發生時插入。
  • 1更多的事情是BaseRecord實現Serializable,並且用戶可以根據操作模式修改BaseRecords(最終DB記錄)修改TriggerRecord所以我需要(的toString()都BaseRecords的方法,干將,制定者,以及其他數據修改)和TriggerRecord(BaseRecords方法非常久遠的觸發激活事件數據處理方法)

所以..

class BaseRecord implements Serializable 
{ 
     ... 
     ... 
} 

class TriggerRecord 
{ 
EventData eventData;  //Non-custom Objects 
BaseRecord br; 
} 

所以我的問題

  • 我是否應該在這種情況下使用組成?
  • 並通過網絡序列化發送TriggerRecord ArrayList會自動實現,因爲TriggerRecord的所有數據成員都是可序列化的,還是我需要使用SerialVersionUID顯式實現Serializable?

編輯1: 截至目前TriggerRecord只有1 BaseRecord的自定義對象,可能增加更多的..而且基本上TriggerRecord過另一個映射到數據庫記錄有EVENTDATA和BaseRecord存儲不同格式,因爲它保存超過1間的關係..

,如果我延長BaseRecord然後我就會有BaseRecords使用super.toString調用()來訪問BaseRecord的字符串表示.. ,我只是用TriggerRecord內BaseRecord組成試過..它需要實現Serializable,即使所有的數據成員已經是Serializable ..所以問爲什麼有必要顯式實現Serializable的類,我ŝ由其他自定義的對象

+0

仍然沒有得到必要但確定我解決了一個解決方案..我實現了它的複合對象,因爲沒有它導致NotSerializableException – ritesht93

回答

0

對於你的知識,在Java:

組成意味着一個對象實例(A)存在有需要的其他對象實例(A1,A2,A3),例如

public class Car { 

    private Engine engine = null; 
    private Body body = null; 
    private List<Tyre> tyres = null; 
    ... 
} 

如果您還沒有任何存在,您可以實例Car對象,但它是不一致的。

系列化正在寫一個對象及其相關對象圖流,即

FileOutputStream fileOut = new FileOutputStream("/tmp/object.ser"); 
ObjectOutputStream out = new ObjectOutputStream(fileOut); 

out.writeObject(YOUR_OBJECT_INSTANCE); 

out.close(); 

如果你的對象沒有實現java.io.Serializable這個代碼拋出NotSerializableException,這同樣適用於所有其非靜態和非瞬態數據成員等遞歸直到關閉。使用指定的SerialVersionUID更好,因此JVM不會在運行時計算它。

你的情況:

  • 是否我應該使用成分在這種情況下?

,如果你用的組合物,在你TriggerRecord必須實現,結合EventDataBaseRecord操作的方法。

如果TriggerRecordBaseRecord有一些共同點,請將其擴展並使用覆蓋方法。避免代碼重複且代碼效率低下。

  • ,並通過發送網絡序列化TriggerRecord的ArrayList將作爲TriggerRecord 的所有數據成員自動實現可序列化或我需要明確的實現Serializable 用的serialVersionUID?

和以前一樣,最好有自己的SerialVersionUID爲每個類。

如果您添加更多詳細信息,我們可以通過其他更好的方式爲您提供幫助。

+0

看看..添加了一些細節 – ritesht93

+0

「像以前一樣,最好有自己的SerialVersionUID for每個類。當你序列化列表,地圖或其他複合對象時,「..所以我需要實現Serializable,即使複合對象已經實現了它..? – ritesht93

+0

是的,所有的對象必須是可序列化的,否則你可能會有異常或錯誤的序列化,這會給你帶來骯髒或錯誤的數據。 –