2012-02-23 5 views
0

Надеюсь, что кто-то может помочь с особенно необычной проблемой. В следующем коде (полностью отлаженный) первый случай (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; 
    } 
} 

}

+0

ли Баннер реализации IBanner? –

+0

Забыл упомянуть, извините. И BannerSingle, и Banner реализуют IBanner. Даже если я не верну их (просто создайте новые экземпляры локально), проблема сохраняется. – JoelPrz

+1

Когда вы говорите, что не можете скомпилировать, что такое ошибка? –

ответ

0

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

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

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

Смежные вопросы