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ď č. 1Myslí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.