Неожиданное присвоение переменной внутри статического метода класса - PullRequest
0 голосов
/ 23 февраля 2012

Надеясь, кто-то может помочь с особенно необычной проблемой. В следующем коде (тщательно отлаженном) встречается первый случай (1) в коммутаторе, и новый экземпляр BannerSingle назначается для retVal (возвращаемое значение). К сожалению, хотя второй случай (2) никогда не встречается, назначение в нем retVal происходит, и я не могу скомпилировать. Когда я закомментирую назначение retVal для «case 2:», все работает отлично.

Я попытался использовать вместо этого if / else, и я все еще получаю такое же странное поведение. Также пробовал ряд решений с участием отдельных переменных и т. Д. Кто-нибудь знает, где я напортачил? Заранее спасибо. JAP

package fl {

import fl.IBanner;
import fl.Banner;
import fl.BannerSingle;
import fl.BannerVars;
import flash.display.Stage;
import flash.display.MovieClip;

public class BannerFactory {

    private static var retVal:IBanner;

    public function BannerFactory() {}

    public static function createBanner(bannerVars:Object, ob:Stage):IBanner {          
        switch (bannerVars.numRecipes) {
            case 1:
                retVal = new BannerSingle(bannerVars, ob);
                break;
            case 2:
                retVal = new Banner(bannerVars, ob);
                break;
            default:
                break;
        }   
        return retVal;
    }
}

}

1 Ответ

0 голосов
/ 24 февраля 2012

Вы должны использовать фигурные скобки, чтобы ввести новое пространство объявлений, без каких-либо переменных, объявленных внутри оператора switch, видимых из их точки объявления во всех ветвях case.Попробуйте следующее.

    switch (bannerVars.numRecipes) {
        case 1:
        {
            retVal = new BannerSingle(bannerVars, ob);
        }
            break;
        case 2:
        {
            retVal = new Banner(bannerVars, ob);
        }
            break;
    }   

Кроме того, пустой регистр по умолчанию является избыточным ...

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