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 № 1Myś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.