参考静态常量,会发生错误:
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);
}
}
Block class:
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);
}
}
请告诉我如何摆脱这个错误?
答案 0 :(得分:0)
不确定你要做什么。
你不能这样做吗?
public static const BEDROCK_ID:int = 1;
答案 1 :(得分:0)
我相信这是因为静态常量的绑定是在第一次提到类时创建的。你可以试试吗:
trace(Block.STONE, Block.STONE.id);
或者类似的东西。从技术上讲,它应该可以正常工作,但可能会有一些竞争条件涉及首先构建的类(Block或StoneBlock)。
修改强>
我越是想到它,我就越相信它是竞争条件,运行时试图在构造Block类时构建StoneBlock类(即它还没有构造),但StoneBlock要求Block存在于它的构造时间。不幸的是,看起来您必须将常量重做为将根据请求返回值的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;
}
因为通过这种方式,您将能够将依赖类的实例化设置为完全构造它所依赖的类的时间。这不是一个非常好的解决方案,但看起来你没有多少选择。