Проблема клонирования расширенного ByteArray - PullRequest
0 голосов
/ 17 мая 2009

Я расширил класс 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?

Большое спасибо!

Ответы [ 2 ]

1 голос
/ 18 мая 2009

Я думаю, это потому, что tmp имеет тип ByteArray, а не тип MyByteArray. Если вы делаете TMP типа MyByteArray, он должен вернуть объект того же типа, используя writeObject, я думаю? Или, возможно, вам придется ввести его.

0 голосов
/ 19 мая 2009

ByteArray, вероятно, рассматривается как особый случай для сериализации объектов, поэтому я сомневаюсь, что вы обойдете его.

Попытка подкласса ByteArray звучит для меня как запах кода. Я бы посоветовал использовать инкапсуляцию, а не наследование для решения вашей проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...