Ранее действительные ссылки на статические методы игнорируются компилятором Flash 10.1 - PullRequest
0 голосов
/ 13 сентября 2011

У меня есть программа, написанная на ActionScript 3, которую я без ошибок компилировал во Flash CS4 (FP10). Сейчас я пытаюсь скомпилировать для Flash CS5 (FP 10.1?) И получаю сумасшедшие ошибки из-за того, что кажется обыденным. Интересно, кто-нибудь может предложить понимание ...

Этот блокировщик, который получает ошибку компилятора 1061 (Call to a possibly undefined method parseBoolean through a reference with static type Class), потому что он, очевидно, не может прочитать открытый статический метод для служебного класса, который я написал. Основная справочная структура выглядит следующим образом:

Класс полезности:

package com.lassie.utils
{
    public final class XMLUtil
    {
        public static function parseBoolean($value:String, $defaultValue:Boolean=false):Boolean {
            if ($value == null || $value == "") return $defaultValue;
            return ($value == "1" || $value == "true");
        }
    }
}

Ссылочный скрипт:

import com.lassie.utils.XMLUtil;

function parseXML($xml:XML, $tween:PuppetTween):PuppetTween
{
    $tween.followGrid = XMLUtil.parseBoolean( $xml.@followGrid, true );
    $tween.animateMoves = XMLUtil.parseBoolean( $xml.@animateMoves, true );
    $tween.confineToWalkarea = XMLUtil.parseBoolean( $xml.@confineToWalkarea, false );
    return $tween;
}

По какой-то причине я получаю сообщение об ошибке 1061: Call to a possibly undefined method parseBoolean through a reference with static type Class для каждой ссылки на статический вспомогательный метод parseBoolean. Как будто компилятор полностью игнорирует тот факт, что метод существует в классе XMLUtil, несмотря на то, что он объявлен как открытый и статический. Опять же, это работало как в Flash 9, так и в Flash 10 компиляторах. Это просто CS5, который внезапно выбрасывает эту проблему.

Есть идеи? У кого-нибудь еще была похожая проблема с миграцией? Спасибо.

Ответы [ 2 ]

0 голосов
/ 13 сентября 2011

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

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

0 голосов
/ 13 сентября 2011

Я тоже сталкивался с этим, и в моем случае это не имело никакого отношения к статическому члену, но почему-то компилятор запутался, потому что я использовал уже существующее имя класса (хотя в другом пакете !!!) Код отлично скомпилирован в CS4, но сломался в CS5.

Решением было использование полного имени:

import com.lassie.utils.XMLUtil;

function parseXML($xml:XML, $tween:PuppetTween):PuppetTween
{
    $tween.followGrid = com.lassie.utils.XMLUtil.parseBoolean( $xml.@followGrid, true );
    $tween.animateMoves = com.lassie.utils.XMLUtil.parseBoolean( $xml.@animateMoves, true );
    $tween.confineToWalkarea = com.lassie.utils.XMLUtil.parseBoolean( $xml.@confineToWalkarea, false );
    return $tween;
}

Я так и не узнал, почему это произошло (и не нашел времени на его поиск) Надеюсь, это поможет

...