Flash 静态常量错误[闪存]
参考静态常数时,会出现错误:Flash 静态常量错误[闪存],flash,static,constants,Flash,Static,Constants,参考静态常数时,会出现错误: TypeError: Error #1009: at global$init()[StoneBlock.as:3] at Block$cinit() at global$init()[Block.as:3] at Main()[Main.as:10] 样品 主要类别: public class Main extends Sprite { public function Main() { trace(
TypeError: Error #1009:
at global$init()[StoneBlock.as:3]
at Block$cinit()
at global$init()[Block.as:3]
at Main()[Main.as:10]
样品
主要类别:
public class Main extends Sprite
{
public function Main()
{
trace(Block.STONE.id);
}
}
块类:
public class Block
{
public static const BEDROCK:Block = new Block(1);
public static const STONE:Block = new StoneBlock(2);
public var id:int;
public function Block(id:int)
{
this.id = id;
}
}
public class StoneBlock extends Block
{
public function StoneBlock(id:int)
{
super(id);
}
}
石块等级:
public class Block
{
public static const BEDROCK:Block = new Block(1);
public static const STONE:Block = new StoneBlock(2);
public var id:int;
public function Block(id:int)
{
this.id = id;
}
}
public class StoneBlock extends Block
{
public function StoneBlock(id:int)
{
super(id);
}
}
请告诉我如何消除此错误?不确定您想做什么 你不能这样做吗
public static const BEDROCK_ID:int = 1;
我相信这是因为静态常量的绑定是在第一次提到类时创建的。你能试着做:
trace(Block.STONE, Block.STONE.id);
或者类似的东西。从技术上讲,它应该按原样工作,但可能有一些种族条件涉及到什么类是先建造的(块或石头块)
编辑
我想得越多,我就越确信这是竞争条件,运行时试图在构造块类时构造StoneBlock类(即,它还没有构造),但StoneBlock要求块在构造时存在。不幸的是,看起来您必须将常量重做到getter中,getter将根据请求返回值:
public static const STONE:Block = new StoneBlock(2);
>>>>>
private static var _stone:Block;
public static function get STONE():Block
{
if (!_stone) _stone = new StoneBlock(2);
return _stone;
}
因为通过这种方式,您将能够将依赖类的实例化定义为它所依赖的类完全构造的时间。这不是一个很好的解决方案,但看起来你没有太多的选择。我想在游戏中如何做MineCraft:public static final Block STONE=(新BlockStone(1,1)).c(1.5F).b(10.0F).a(h).a(“STONE”);您不应该将代码建立在模糊和反编译代码的基础上。如果没有上下文,您在上面的注释中显示的代码毫无意义。好的,您的选择不合适。我需要存储对象类,而不是它们的ID。我需要知道错误的原因。谢谢你的澄清。我决定做不同的事情:
公共静态函数init():void{…STONE=newstoneblock(1);…}