Oop 如何在Dart中获取类的所有子类?

Oop 如何在Dart中获取类的所有子类?,oop,dart,dart-mirrors,Oop,Dart,Dart Mirrors,例如: 类基{ 静态抽象void foo(); } 类ChildA扩展了基{ 静态void foo(){}; } 类ChildB扩展了基{ 静态void foo(){}; } 我想找到“Base”的所有子类(在每个子类上调用foo)。 我需要在构建时找到它(不需要运行时)。 我唯一的想法就是使用反射。但我不知道如何从ClassMirror访问类 这就是我到目前为止所做的: final mirror=currentMirrorSystem(); forEach((uri,libMirror){

例如:

类基{
静态抽象void foo();
}
类ChildA扩展了基{
静态void foo(){};
}
类ChildB扩展了基{
静态void foo(){};
}
我想找到“Base”的所有子类(在每个子类上调用foo)。 我需要在构建时找到它(不需要运行时)。 我唯一的想法就是使用反射。但我不知道如何从ClassMirror访问类

这就是我到目前为止所做的:

final mirror=currentMirrorSystem();
forEach((uri,libMirror){
libMirror.classes.forEach((名称,ClassMirror-ClassMirror){
试一试{
while((classMirror=classMirror.superclass)!=null){
if(MirrorSystem.getName(classMirror.qualifiedName)=“.Base”){
//这是我想要的班级镜子
//但我不知道如何访问它
//或者如何对其调用foo()
打印(classMirror);
打印(classMirror.simpleName.toString());
}
}
}捕获(e){
印刷品(e);
}
});
});
如前所述,我在运行时不需要这样做,所以也许完全不同的方法可以解决这个问题。若并没有,问题是:如何调用foo()


提前谢谢。

对不起,伙计们,也许相关功能比搜索更有效,或者我的研究不够努力,但无论如何,我发现:

那里的答案也建议使用镜子。 为了回答我自己的问题,调用静态方法foo的一种方法是使用invoke方法:

classMirror.invoke(#foo, []);

但这可能仍然不是一个最佳解决方案,也许在构建时有更好的方法可以做到这一点?

看起来您已经解决了您的问题;)显然,也可以在源代码上使用“源镜像”,而不将其实际加载到vm中。但是我还没有看到任何关于如何使用这个的文章。这方面的代码可能隐藏在dart2js源代码中。您可以查看docgen工具,了解如何使用该工具的示例。还有关于“镜像构建器”的讨论,它允许您使用镜像api来扩展和修改程序。但就目前而言,我认为你所做的可能是最好的方式。i、 e.在构建时找到类,然后生成包含的源代码。您可以调用静态方法作为函数。apply(ClassB.foo,[]);它不需要镜子。但是,如果您想从每个子类动态获取方法,则需要镜像。