Flash Builder не позволяет мне переопределять унаследованные методы. Я сбит с толку - PullRequest
1 голос
/ 21 января 2012

Я пишу ActionScript почти 10 лет;но я всегда использовал отдельные текстовые редакторы, такие как TextMate, для написания кода и Flash IDE для его компиляции.Я решил, что на этих выходных я попробую Flash Builder, поскольку это, безусловно, путь вперед.

В любом случае.Я использую Flash Builder 4.6 на OSX - установлен сегодня утром, и я не задумывался о нем - и я создал простое «Мобильное приложение Actionscript» (потому что мой текущий рабочий проект - мобильное приложение для мобильных устройств, которое создается сFlash IDE).

package
{
    import zakariya.layout.RootLayoutSprite;

    public class DoesThisEvenWork extends RootLayoutSprite
    {
        public function DoesThisEvenWork()
        {
            super();

            trace( "hello... what's my size: " + this.size );
        }
    }

    override public function onLayoutUpdated():void
    {
        super.onLayoutUpdated();

    }

    override public function onSizeChanged():void
    {
        super.onSizeChanged();
        trace( 'onSizeChanged..., new size: ' + this.size );   
    }
}

Класс RootLayoutSprite является производным от LayoutSprite и является частью API управления компоновкой, который я написал и использовал в десятках проектов, больших и малых.Методы onLayoutUpdated и onSizeChanged определены в LayoutSprite, а также свойство size.

Определение выглядит более или менее следующим образом:

package zakariya.layout 
{
    public class LayoutSprite extends Sprite {

        /*
            Called after this Sprite's size changes, before layout of children is executed
        */
        public function onSizeChanged():void
        {}

        /*
            Called after this Sprite's size changes, after layout of children is executed
        */
        public function onLayoutUpdated():void
        {}


    }
}

Код zakariya.layout является необработанным кодом влокальный репозиторий - не скомпилированный в SWC - и все это в структуре папок, которую я добавил к исходному пути проекта.Flash Builder четко распознает базовые классы, потому что он распознает RootLayoutSprite.

Когда я пытаюсь построить это, я получаю следующее:

1006: A super expression can be used only inside class instance methods.    DoesThisEvenWork.as /DoesThisEvenWork/src   line 17 Flex Problem
1010: The override attribute may be used only on class property definitions.    DoesThisEvenWork.as /DoesThisEvenWork/src   line 15 Flex Problem
1010: The override attribute may be used only on class property definitions.    DoesThisEvenWork.as /DoesThisEvenWork/src   line 21 Flex Problem
1020: Method marked override must override another method.  DoesThisEvenWork.as /DoesThisEvenWork/src   line 15 Flex Problem
1020: Method marked override must override another method.  DoesThisEvenWork.as /DoesThisEvenWork/src   line 21 Flex Problem

Итак, Flash Builder не позволяет мне переопределять эти методы.Если я уберу атрибуты «переопределить», Flash Builder будет жаловаться, что методы определены в базовом классе.Facepalm.

Имейте в виду, этот простой код прекрасно работает во Flash IDE.

Я, честно говоря, понятия не имею, что происходит.Я не обманул конфигурацию Flash Builder.Я много лет избегал Flash Builder, потому что не писал проекты Flex ... и в свободное время я пишу на C ++, поэтому ничего не знаю о наборе инструментов затмения Flash Builder.

Я предполагаю, что Flash IDE имеет менее строгий компилятор, чем Flash Builder, и поэтому я так долго делал что-то не так, я не знал, что это неправильно.

Помощь?!

1 Ответ

2 голосов
/ 22 января 2012

Код также не должен компилироваться в Flash IDE - он содержит синтаксическую ошибку. Вы закрыли объявление класса после конструктора. Просто переместите эту фигурную скобку до конца, и все должно работать нормально.

package
{
    import zakariya.layout.RootLayoutSprite;

    public class DoesThisEvenWork extends RootLayoutSprite
    {
        public function DoesThisEvenWork()
        {
            ...
        }
    } // <= your class ends here

    // everything below is outside of the class!

    override public function onLayoutUpdated():void
    {
     ...}
}
...