为什么无法通过 Type.getClass() 访问 class 的静态字段?

Why is it not possible to access static fields of a class via Type.getClass()?

在Haxe中,可以通过以下函数获取对象的class:

Type.getClass(myObject);

如果对象 myObject 是 class myClass 的一个实例,它包含一个静态字段,我应该可以访问这个静态字段:

class MyClass
{
    public static myStaticField:Int = 5;
}

public var myObject = new MyClass();

//expected trace: "5"
trace (Type.getClass(myObject).myStaticfield);

但结果是:

"Class <MyClass> has no field myStaticField."

知道为什么吗?

尝试 Reflect class(特别是 callMethod 或 getProperty 函数)。

你需要使用反射来获取这样的值:

class Test {    
    @:keep public static var value = 5;

    static function main() {
        var test = new Test();
        var v = Reflect.field(Type.getClass(test), "value");
        trace(v);
    }

    public function new() {}
}

请注意,为了防止 DCE(死代码消除),我必须用 @:keep 标记静态变量。通常 DCE 会抑制该变量,因为它从未被直接引用。

这里的工作示例:http://try.haxe.org/#C1612