【问题标题】:Why is it not possible to access static fields of a class via Type.getClass()?为什么不能通过 Type.getClass() 访问类的静态字段?
【发布时间】:2015-07-31 12:54:29
【问题描述】:

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

Type.getClass(myObject);

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

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

public var myObject = new MyClass();

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

但是结果是:

“类 没有字段 myStaticField。”

知道为什么吗?

【问题讨论】:

    标签: class types haxe


    【解决方案1】:

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

    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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2019-12-26
        • 1970-01-01
        • 1970-01-01
        • 2014-07-13
        • 1970-01-01
        • 2010-10-01
        • 2021-10-01
        • 2016-11-06
        • 1970-01-01
        相关资源
        最近更新 更多