Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   не приводится к типу (http://www.flasher.ru/forum/showthread.php?t=150131)

passertm 07.02.2011 01:25

не приводится к типу
 
Здравствуйте.

Странную вещь заметил. Вроде даже решил. Но не понятно действительно ли так должно быть. И так

Есть событие
Код AS3:

        public class IPEvent extends Event {
                public var obj:Object;
                public static var onIPEvent:String = "IPEvent_txt";
 
                public function IPEvent(newobj:Object = null) {
                        super(onIPEvent);
                        obj = newobj;
                }
        }



И есть три класса. В первом классе вызывается
Код AS3:

dispatchEvent(new IPEvent(item.source));

Во втором классе
Код AS3:

someobj.addEventListener(IPEvent.onIPEvent, taskEventHappen);
public function taskEventHappen(e:IPEvent) {
..............
        if (.......) {
                dispatchEvent(e);
        }
}

Ну и третий класс.
Код AS3:

exp.addEventListener(IPEvent.onIPEvent, onIPEventAction);
public function onIPEventAction(event1:Event) {
        trace("onIPEventAction " + event1);
 
        var event:IPEvent=IPEvent(event1);
}

и вот на последней строчке выходит ошибка

taskEventHappen [Event type="IPEvent_txt" bubbles=false cancelable=false eventPhase=2]
onIPEventAction [Event type="IPEvent_txt" bubbles=false cancelable=false eventPhase=2]
TypeError: Error #1034: Type Coercion failed: cannot convert flash.events::Event@f4fde21 to iconpane.IPEvent.



Подскажите что я делаю не правильно?
Зачем приходится пересоздавать события?

i.o. 07.02.2011 01:37

Event не имплементит ваш IPEvent интерфейс. Да и не приводите вы, а конвертируете.

passertm 07.02.2011 10:01

Цитата:

Сообщение от i.o. (Сообщение 971064)
Event не имплементит ваш IPEvent интерфейс.

а почему если dispatchEvent вызывался с обьектом класса IPEvent?

Цитата:

Сообщение от i.o. (Сообщение 971064)
Да и не приводите вы, а конвертируете.

вы уверены? что то я сильно сомневаюсь...

i.o. 07.02.2011 10:06

Цитата:

TypeError: Error #1034: Type Coercion failed: cannot convert flash.events::Event@f4fde21 to iconpane.IPEvent.
В тексте ошибки четко сказано, что он не может привести flash.events::Event к вашему интерфейсу.
Я без понятия откуда там берется обычный Event, весь код вы не привели.
Цитата:

вы уверены?
да, уверен. Плеер не без мозгов все же, поэтому в случае неудачной конвертации попытается выполнить приведение, как в данном случае.
Вообще приводят типы с помощью оператора "as".

cleptoman 07.02.2011 10:08

event1 as IPEvent
Event#bubbles

возможно, что-то из этого вам поможет )

alatar 07.02.2011 10:57

Во второй класс вам приходит IPEvent. Что вы потом диспатчите из него?
Цитата:

if (.......) {
dispatchEvent(e);
}

etc 07.02.2011 14:28

Не описан clone().

passertm 07.02.2011 15:38

Цитата:

Сообщение от alatar (Сообщение 971123)
Во второй класс вам приходит IPEvent. Что вы потом диспатчите из него?

ой. Извиняюсь. видимо случайно задел когда убирал не нужный код.

Цитата:

Сообщение от i.o. (Сообщение 971117)
Я без понятия откуда там берется обычный Event, весь код вы не привели.

Так там больше ниего и нету что могло бы на это повлиять.

Цитата:

Сообщение от i.o. (Сообщение 971117)
В тексте ошибки четко сказано, что он не может привести flash.events::Event к вашему интерфейсу.
да, уверен. Плеер не без мозгов все же, поэтому в случае неудачной конвертации попытается выполнить приведение, как в данном случае.

На сколько я понимаю сначало делается попытка привезти к типу.
В случае когда это оканчивается неудачой делается попытка конвертацииодного класса в другой при помоши стандартных функций(на пример toString()). Поэтому ипишется в сообшении что не удается конвертировать. Хотя если бы передавался действительно IPEvent никаких проблем не возникало и нормально приводилось(!) бы к типу. Хотя возможно я ошибаюсь.


Цитата:

Сообщение от etc (Сообщение 971190)
Не описан clone().

Вы действительно правы. Я не сразу понял в чем дело.
Так как я не клонирую данный обьект и не реализую клонирование для данного класса это делает за меня dispatchEvent. он использует функцию clone() описанную в Event, которая возврашает Event. Вот откуда появляется обьект event.

Спасибо за подсказку. и потраченное время.


Часовой пояс GMT +4, время: 05:50.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.