/ / Problem z klonowaniem rozszerzonego ByteArray - flex, flash, actionscript-3

Problem z klonowaniem rozszerzonego ByteArray - flex, flash, actionscript-3

Rozszerzyłem klasę ByteArray, tak jak poniżej:

[RemoteClass(alias="MyByteArray")]
public class MyByteArray extends ByteArray {}

i sklonowano instancję tej klasy używającByteArray # readObject () / writeObject (). Jednak z jakiegoś powodu sklonowany obiekt jest instancją ByteArray zamiast MyByteArray. Jest to przedstawione w następującym przykładzie:

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

Co więcej, kiedy dodaję pewne niestandardowe pola do klasy MyByteArray, nie są one zapisywane za pomocą metody writeObject () i nie są klonowane ...

Czy ktoś może mi wyjaśnić, dlaczego sklonowany obiekt nie jest instancją MyByteArray?

Wielkie dzięki!

Odpowiedzi:

1 dla odpowiedzi № 1

Myślę, że to dlatego, że tmp jest typu ByteArray,nie typu MyByteArray. Jeśli utworzysz tmp typu MyByteArray, powinien on zwrócić obiekt tego samego typu, używając writeObject i think? Lub może być konieczne jej typowanie.


0 dla odpowiedzi nr 2

ByteArray jest prawdopodobnie traktowany jako specjalny przypadek serializacji obiektów, więc wątpię, że się z nim obejmiesz.

Próba podklasy ByteArray brzmi dla mnie jak zapach kodu. Spróbuję użyć enkapsulacji zamiast dziedziczenia, aby rozwiązać twój problem.