/ / Problém s klonovaním rozšíreného ByteArray - flex, flash, actionscript-3

Problém s klonovaním rozšíreného ByteArray - flex, flash, actionscript-3

Rozšíril som triedu ByteArray takto:

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

a clonovali inštanciu tejto triedy pomocouByteArray # readObject () / writeObject (). Z nejakého dôvodu je však klonovaný objekt inštanciou ByteArray a nie MyByteArray. Toto je ilustrované v nasledujúcom príklade:

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

Navyše, keď pridám niekoľko vlastných polí do triedy MyByteArray, nie sú uložené s writeObject () a ani nie sú klonované ...

Môže mi niekto vysvetliť, prečo klonovaný objekt nie je inštanciou MyByteArray?

Mnohokrat dakujem!

odpovede:

1 pre odpoveď č. 1

Myslím, že to je preto, že tmp je typu ByteArray,nie typu MyByteArray. Ak urobíte tmp typu MyByteArray, mal by vrátiť objekt rovnakého typu, pomocou writeObject si myslím? Alebo možno budete musieť písať.


0 pre odpoveď č. 2

ByteArray je pravdepodobne riešený ako špeciálny prípad pre serializáciu objektov, takže pochybujem, že sa vám to podarí.

Pokus o podtriedu ByteArray mi znie ako kód mi páchnuť. Pri riešení vášho problému by som sa pozrel na používanie zapuzdrenia namiesto dedičstva.