静态const错误[Flash]

时间:2012-05-15 13:41:41

标签: flash static const

参考静态常量,会发生错误:

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);
    }
}

请告诉我如何摆脱这个错误?

2 个答案:

答案 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;
}

因为通过这种方式,您将能够将依赖类的实例化设置为完全构造它所依赖的类的时间。这不是一个非常好的解决方案,但看起来你没有多少选择。