好的,ObjectUtil.copy是一种很好的复制对象的技术。但是在使用它来复制其他类有很多问题之后,我想这不是我想要的解决方案。
您将如何处理复制/克隆您定义的类的实例?也许用类来定义一个函数来复制它?
很酷的是,大多数变量都是通过flex引用传递的,但有时很烦人无法控制它(对不起,我已经习惯了普通的C)。
谢谢!
更新:
更确切地说,因为我不能使ObjectUtil.copy()与自定义类一起工作...有没有办法通过序列化来复制自定义类?您是否成功使用了带有自定义类的ByteArray副本?
感谢所有回复。
答案 0 :(得分:3)
如果您确定在您的情况下实施clone
接口不正确,我建议您查看ByteArray
对象。我自己没有使用它,但它似乎可以为您提供所需的控制权,而不是单个字节。您可以reading和writing来自任何对象。
Senocular快速概述了它here。
function clone(source:Object):* {
var copier:ByteArray = new ByteArray();
copier.writeObject(source);
copier.position = 0;
return(copier.readObject());
}
祝你好运!
答案 1 :(得分:3)
ObjectUtil.copy 在内部使用 ByteArray 来创建副本。为了使副本成功,ByteArray要求flash播放器将知道您的自定义类。您可以使用全局 registerClassAlias 方法注册课程。
例如:
//one time globally to the application.
registerClassAlias(getQualifiedClassName(CustomClass), CustomClass);
//then
var c1:CustomClass = new CustomClass();
c1.name = "customClass";
var c2:CustomClass = ObjectUtil.copy(c1);
trace(ObjectUtil.toString(c1))
trace(ObjectUtil.toString(c2))
答案 2 :(得分:2)
如果您可以控制整个类层次结构,我建议在每个类中实现一个clone()
接口。这很乏味,但随着复杂性的增加会得到回报。
(请原谅我,如果语法有点偏,那已经有一段时间了)
// define a "cloneable" interface
public interface ICloneable {
function clone() : Object;
}
对于每个班级,实施方法......
public class MyClass1 implements ICloneable {
...
public function clone() : Object {
var copy:MyClass1 = new MyClass1();
// copy member variables... if it is a user-defined object,
// make sure you call its clone() function as well.
return copy;
}
}
要创建对象的副本,只需调用clone()
函数。
var copy:MyClass1 = original.clone();
作为旁注,Java和.NET似乎都在其基础clone
类上采用了Object
方法。我知道ActionScript的Object
类没有类似的方法。
答案 3 :(得分:0)
两个常用的习语:
clone
方法这两个版本都可以让您定义复制的确切含义 - 您可能希望将某些内容轻微复制,而将其他内容深深复制。