我已经扩展了ByteArray类,如下所示:
[RemoteClass(alias="MyByteArray")]
public class MyByteArray extends ByteArray {}
使用ByteArray #readObject()/ writeObject()克隆此类的实例。但是,由于某种原因,克隆对象是ByteArray的实例而不是MyByteArray。以下示例说明了这一点:
registerClassAlias("MyByteArray", MyByteArray);
var b1:MyByteArray = new MyByteArray();
var tmp:ByteArray = new ByteArray();
tmp.writeObject(b1);
tmp.position = 0;
var b2:* = tmp.readObject();
trace( b2 is MyByteArray ); // prints false
trace( b2 is ByteArray ); // prints true
此外,当我在MyByteArray类中添加一些自定义字段时,它们不会与writeObject()一起保存,也不会克隆...
有人可以解释为什么克隆对象不是MyByteArray的实例吗?
非常感谢!
答案 0 :(得分:1)
我认为这是因为tmp是ByteArray类型,而不是MyByteArray类型。如果你创建类型为MyByteArray的tmp,它应该返回一个相同类型的对象,我认为使用writeObject?或者您可能需要对其进行类型转换。
答案 1 :(得分:0)
ByteArray很可能作为对象序列化的特例处理,所以我怀疑你会解决它。
尝试子类ByteArray听起来像是一个代码味道给我。我会考虑使用封装而不是继承来解决您的问题。