![]() |
|
||||||||||
|
|
|
|||||
|
Регистрация: Jun 2010
Сообщений: 2
|
Использую BLAZEDS для связи с java WEB приложением.
На java есть классы: public class BasicObject implements Serializable {
protected long id;
protected BasicObject parent;
protected String name;
....
}
public class ElDocument extends BasicObject {
...
}
public List<BasicObject> getObjects() {
List res = new ArrayList();
res.add(new ElDocument(...));
return res;
}
ElDocument в тип BasicObject, при этом часть полей из ElDocument обнуляются. Как решить такую проблему, используя общепринятые подходы ООП? При попытке во FLEX множественно унаследовать ElDocument от BasicObject выдается ошибка. |
|
|||||
|
Modus ponens
|
Не использовать DCD, оно просто плохо работает, и от него больше головной боли, чем толку.
В вашем примере в упор не могу разглядеть множественное наследование... где оно? В AS3 поддерживается только множественное наследование у интерфейсов, у классов его нет. В принципе ваш пример должен работать, ну, на вид, нет в нем ничего такого, что бы помешало. То же самое нормально работает в PHP например.
__________________
Hell is the possibility of sanity |
|
|||||
|
Регистрация: Jan 2010
Сообщений: 211
|
Да, вроде все слаженно. Хотя можно посмотреть на модель объектов во Flex'е.
Кстати, между идентефикатором управления доступом protected в Java и AS3 есть небольшие различия. Маловероятно, но все-таки можно допустить, что это могло привести к несоответствиям. |
|
|||||
|
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
сериализуются только паблик свойства.
И, это.. а где про множественное наследование? )))))
__________________
Отряд Котовскага |
|
|||||
|
Регистрация: Jun 2010
Адрес: Беларусь, Гродно
Сообщений: 58
|
Я так понял что на флексе у тебя есть 2 класса:
BasicObject и ElDocument extends BasicObject На яве у тебя тоже должно быть 2 класса: BasicObject и ElDocument extends BasicObject притом оба класса на флексе должны быть pарегестрированны: registerClassAlias("BasicObject", "BasicObject"); registerClassAlias("ElDocument", "ElDocument"); или через [RemoteClass], но это работает не всегда. если же ты замапил 1 ява класс на два флексовых, то будет такой эффект. Если же ты на флексе зарегистрировал 1 класс BasicObject и с явы пытаешь послать ElDocument, который на яве наследуется от BasicObject. То на флексе тебе прилетит не то, ибо флекс сериализует/десериализует один к одному (по мапе) и про наследование он ничего не знает и знать не будет. ЗЫ: Множественное наследование - это когда класс наследуется от нескольких классов-родителей. Скажем: ElDocument extends BasicObject, SecondObject. Такое в яве и флексе не поддерживается Последний раз редактировалось alexberkut; 25.06.2010 в 14:25. |
|
|||||
|
Регистрация: Jun 2010
Сообщений: 2
|
Прошу прощения что сразу подробно не описал:
на яве есть 2 класса public class BasicObject implements Serializable {
....
}
public class ElDocument extends BasicObject {
...
}
[ExcludeClass]
public class _Super_BasicObject extends flash.events.EventDispatcher implements com.adobe.fiber.valueobjects.IValueObject
{
model_internal static function initRemoteClassAliasSingle(cz:Class) : void
{
try
{
if (flash.net.getClassByAlias("BasicObject") == null)
{
flash.net.registerClassAlias("BasicObject", cz);
}
}
catch (e:Error)
{
flash.net.registerClassAlias("BasicObject", cz);
}
}
...
[ExcludeClass]
public class _Super_ElDocument extends flash.events.EventDispatcher implements com.adobe.fiber.valueobjects.IValueObject
{
model_internal static function initRemoteClassAliasSingle(cz:Class) : void
{
try
{
if (flash.net.getClassByAlias("ElDocument") == null)
{
flash.net.registerClassAlias("ElDocument", cz);
}
}
catch (e:Error)
{
flash.net.registerClassAlias("ElDocument", cz);
}
}
...
Поля серриализуемых объектов все публичные. Если нельзя так, то какое есть красивое решение? Неужели для каждого типа объекта надо создавать свой метод? |
|
|||||
|
Регистрация: Jun 2010
Адрес: Беларусь, Гродно
Сообщений: 58
|
А зачем такие хитрые манипуляции:
проверить если алиаса для класса нету то зарегистрировать, если упала ошибка, то зарегистрировать... Ещё и лишные классы заводить какие-то... зачем? пиши просто сразу: registerClassAlias("BasicObject", "BasicObject");
registerClassAlias("ElDocument", "ElDocument");
|
|
|||||
|
Modus ponens
|
alexberkut
Эти "хитрые манипуляции" генерит флексовый компилятор, ввиду большого ума разработчиков. Я даже постил багу, чтобы поправили, меня не поняли и сказали, что фиксить не будут, т.как не понимают в чем глупость в коде... вот так вот.
__________________
Hell is the possibility of sanity |
|
|||||
|
Регистрация: Jun 2010
Адрес: Беларусь, Гродно
Сообщений: 58
|
Ещё один повод руками писать классы, а не пользоваться всякими рукозаменителями.
|
![]() |
![]() |
Часовой пояс GMT +4, время: 05:51. |
|
|
« Предыдущая тема | Следующая тема » |
|
|