为什么无法通过 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
在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