使用 Type.getClassFields() 的结果

Using the result of Type.getClassFields()

如何使用 getClassFields() 返回的 static 字段名称?

Type本身似乎没有任何与此相关的功能,如果在上面返回的字段名称上使用Reflect这样:

trace(Reflect.field(Type.createEmptyInstance(Type.resolveClass(...)), fieldName));

...你得到:

TypeError: Error #1010: A term is undefined and has no properties.

我的目标是使用动态给定的类名获取静态字段的,例如我怎样才能 "hi" 出:

class Blah {
    public static var test:String="hi";
}

...当我事先不知道 Blah 时?

运行 斧头 3.2.1.

这应该有效:

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

静态字段需要通过 Class<T> 类型访问,因此 createEmptyInstance() 在这里不起作用。如果要检索实例字段的值,则需要将实例传递给 Reflect.field()

您还需要确保 Blah 已实际编译并在运行时可用。如果仅通过反射引用它,则情况并非如此——它需要在某处导入。如果启用了 DCE,class 还需要 @:keep 元数据。