2011-01-24 13 views
2

如果沒有對象的創建者實現任何特殊功能(沒有特定的序列化函數)(但是,他們可以使用註釋),有沒有什麼辦法讓Flash序列化一個通用的,可能很深的(對象內的對象內的對象等等)對象?動作腳本對象的深度通用序列化

如果這沒有意義,評論這樣,我會盡量詳細說明。

回答

1

有克隆對象一個通用的方法 - 但不是一個深度複製,但:

public function clone():MyObject 
{ 
    var byteArr:ByteArray = new ByteArray(); 
    byteArr.writeObject(this); 
    byteArr.position = 0; 
    return(byteArr.readObject()); 
} 

反正真正的深拷貝是有時不是真的有用,因爲經常會出現一定的水平,在那裏你會想停下來。所以通常我建議創建一個定義克隆方法的ICloneable接口。爲所有想要克隆的對象實現此對象,併爲所有實現此接口的實例遞歸調用它。

+0

的.writeObject()/的readObject()方法可以非常靈活。除了內建類型,您可以通過首先在flash.net.registerClassAlias()中註冊這些類來使用它來克隆自定義類。你可以讓Flash做它的事情,或者你可以讓你的類實現flash.utils.IExternalizable,它定義了兩個方法,public function writeExternal(output:IDataOutput):void和public function readExternal(input:IDataInput):void,讓您可以自定義該類的實例如何被序列化。 – Metal

+0

這就是我通常會這樣做的 - 但是我需要看一些自定義組件,不幸的是它不能成爲他們實現自己的克隆方法的限制。 (這是這個問題很難的唯一原因,我不能使用紀念設計模式或任何關閉,它必須是完全通用的:()... – SubSevn