关于AS3的深度拷贝, 网站有不少的的文章介绍. 我在EncryptZip项目中也用到了, 由于ZipEntry 有自己的构造函数, 在copier.readObject()处得到了参数个数不匹配错误(ArgumentError: Error #1063), 所以查找了相关资料, 然而最终也没有找到一个好的解决方案.
资料显示:如果不使用registerClassAlias注册类的别名, 会丢失对象的类型信息, 在类型转换时候会有强制类型错误(TypeError: Error #1034:).
无奈只好用了一个折衷的方法:
1. 注释registerClassAlias, 增加fill方法. (丢失类型信息, 返回Object对象)
完整代码 Refer to: http://code.google.com/p/encrypt-zip-as3-java/source/browse/trunk/EncryptZip/flex_src/com/universalmind/cairngorm/vo/ValueObject.as
2. 在ZipEntry里override了clone方法, (使用Object的属性name, 实例化ZipEntry, 赋值并返回ZipEntry对象)
完整代码 Refer to: http://code.google.com/p/encrypt-zip-as3-java/source/browse/trunk/EncryptZip/flex_src/nochump/util/zip/ZipEntry.as
3. 补充:
实现的方式类似copyFrom(src:*):*, 但不同. 在Java中用二进制流的形式将对象深度拷贝成功, 那是因为Java每个对象都有默认的无参构造函数, 而AS3却不支持对象有多个构造函数.
(转贴注明出处)
Author:David
Mail:xiang.okay@gmail.com