如何使用getClassFields()
返回的静态字段名称?
Type
本身似乎没有与此相关的任何功能,如果您在上面返回的字段名称上使用Reflect
这样的话:
trace(Reflect.field(Type.createEmptyInstance(Type.resolveClass(...)), fieldName));
...你得到:
TypeError:错误#1010:术语未定义且没有属性。
我的目标是使用动态给出的类名获取静态字段的值,例如我怎样才能获得"hi"
:
class Blah {
public static var test:String="hi";
}
......当我事先不知道Blah的时候?
运行Haxe 3.2.1。
答案 0 :(得分:5)
这应该有效:
var cl = Type.resolveClass("Blah");
trace(Reflect.field(cl, "test"));
需要通过Class<T>
类型访问静态字段,因此createEmptyInstance()
无法在此处运行。如果要检索实例字段的值,则需要将实例传递给Reflect.field()
。
您还需要确保Blah
实际上已在运行时编译并可用。如果仅通过反射引用,则不会出现这种情况 - 它需要在某处导入。如果您启用了DCE,则该类还需要@:keep
个元数据。