2011-01-24 11 views
2

オブジェクトの作成者が特別な機能(特定のシリアライゼーション機能はありません)を実装することなく(しかし、アノテーションを使用することはできません)、Flashに(オブジェクト内のオブジェクト内のオブジェクトなど、etcなど)オブジェクト?ActionScriptオブジェクトの深い包括的なシリアル化

これが意味をなさない場合は、そのようにコメントしてみてください。

答えて

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の2つのメソッドを定義します。そのクラスのインスタンスがどのようにシリアライズされるかを正確にカスタマイズできます。 – Metal

+0

これは私が通常これについて行う方法ですが、見ることができる必要がある多くのカスタムコンポーネントがあります。残念ながら、独自のクローンメソッドを実装するという制約はありません。 (これは唯一の理由ですが、この問題は難しいですが、私はメモ柄のデザインパターンやそれ以外のものを使うことはできません。それは完全に汎用的です:()... – SubSevn

関連する問題