希望有人可以帮助解决一个特别不寻常的问题。在下面的代码中(彻底调试),满足交换机中的第一种情况(1),并为retVal(返回值)分配了一个新的BannerSingle实例。不幸的是,虽然第二种情况(2)从未得到满足,但其中对retVal的分配发生了,我无法编译。当我将retVal的作业注释掉为“案例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 :(得分:0)
你应该使用大括号来引入一个新的声明空间,如果没有它们,在switch语句中声明的任何变量都可以在所有case分支的声明点中看到。请尝试以下方法。
switch (bannerVars.numRecipes) {
case 1:
{
retVal = new BannerSingle(bannerVars, ob);
}
break;
case 2:
{
retVal = new Banner(bannerVars, ob);
}
break;
}
此外,空的默认情况是多余的......