使用Type.getClassFields()的结果

时间:2016-03-01 08:16:18

标签: haxe

如何使用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。

1 个答案:

答案 0 :(得分:5)

这应该有效:

var cl = Type.resolveClass("Blah");
trace(Reflect.field(cl, "test"));

需要通过Class<T>类型访问静态字段,因此createEmptyInstance()无法在此处运行。如果要检索实例字段的值,则需要将实例传递给Reflect.field()

您还需要确保Blah实际上已在运行时编译并可用。如果仅通过反射引用,则不会出现这种情况 - 它需要在某处导入。如果您启用了DCE,则该类还需要@:keep个元数据。