Macros 从类名运行时访问静态变量
如何在运行时通过知道类的名称来访问它的静态变量 我在父接口数组中存储类的实例(我知道这些类肯定有静态字段“id”)。我可以很容易地在编译时用宏获取“id”,但在运行时很难这样做Macros 从类名运行时访问静态变量,macros,haxe,Macros,Haxe,如何在运行时通过知道类的名称来访问它的静态变量 我在父接口数组中存储类的实例(我知道这些类肯定有静态字段“id”)。我可以很容易地在编译时用宏获取“id”,但在运行时很难这样做 import Macro; interface Parent { } class A implements Parent { static public var id = 1; public var myVar: String; public function new(name: Stri
import Macro;
interface Parent {
}
class A implements Parent {
static public var id = 1;
public var myVar: String;
public function new(name: String){
myVar = name;
}
}
class B implements Parent {
static public var id = 2;
public var myVar: String;
public function new(name: String){
myVar = name;
}
}
class Test {
static private var components = new Array<Parent>();
static function main() {
var a = new A("First.");
components.push(a);
components.push(new B("Second."));
var id = Macro.getId(a);
trace(id);
for (c in components) {
var cc = Type.getClass(c);
trace(Type.getClassName(cc));
// TODO: access 'id'
//trace(Macro.getId(cc));
}
}
}
导入宏;
接口父级{
}
类实现父类{
静态公共变量id=1;
公共变量myVar:String;
公共函数新建(名称:字符串){
myVar=名称;
}
}
类实现父类{
静态公共变量id=2;
公共变量myVar:String;
公共函数新建(名称:字符串){
myVar=名称;
}
}
类测试{
静态私有变量组件=新数组();
静态函数main(){
var a=新a(“第一”);
组件。推送(a);
推动(新的B(“第二”);
var id=Macro.getId(a);
痕迹(id);
用于(组件中的c){
var cc=Type.getClass(c);
跟踪(Type.getClassName(cc));
//TODO:访问“id”
//跟踪(Macro.getId(cc));
}
}
}
代码:在返回
Type.getClass
时,仍然可以使用Reflect.field
trace(Reflect.field(cc, "id"));
只需记住添加@:keep
,以防止未使用的字段被死代码删除(DCE)