dart - 如何在Dart类上获取ClassMirror?

标签 dart dart-mirrors

如何使用Mirrors API获得ClassMirror?我尝试使用顶级reflect()函数,但这需要一个类实例,而不是一个类作为参数。

最佳答案

您可以从类的实例,定义类的库或直接使用类名获取ClassMirror。

从实例或InstanceMirror获取类镜像

要获取有关类的信息,您需要一个ClassMirror。获得一个
ClassMirror,您首先需要一个类的实例或名称
定义类的库。

如果您有实例,则可以使用顶级reflectClass()函数
dart:mirrors库中定义。该函数返回一个ClassMirror
目的:

var classMirror = reflectClass(myObj.runtimeType);
MirrorSystem.getName(classMirror.simpleName); // 'MyClass'

如果您有InstanceMirror,请使用InstanceMirror的type属性获取
ClassMirror:

var myObj = new MyClass();
var instanceMirror = reflect(myObj);
var classMirror = instanceMirror.type;
MirrorSystem.getName(classMirror.simpleName); // 'MyClass'

从库镜像获取类镜像

如果知道定义类的库的名称,则可以获取
该库上的镜像,然后使用库镜像的classes属性
获取ClassMirror。 classes属性返回一个 map ,其中的键
是类名称(表示为Symbols),并且值是关联的
ClassMirror对象。

例如,这里是如何在StringBuffer类上获取ClassMirror的方法。
在“dart:core”库中定义:

var mirrorSystem = currentMirrorSystem();
var libraryMirror = mirrorSystem.findLibrary(const Symbol('dart.core')).first;
var classMirror = libraryMirror.declarations[const Symbol('StringBuffer')];
MirrorSystem.getName(classMirror.simpleName); // 'StringBuffer'

关于dart - 如何在Dart类上获取ClassMirror?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17197257/

相关文章:

dart - 有没有办法检查一个类是否是抽象的?

dart - 使用镜像访问库内部字段

linux - Linux 中的 Dart 编辑器 “source not available”?

flutter - 使用 Flutter new integration_test 进行示例集成测试?

dart - 'read' 如何从 Dart VM 程序中读取一个文件?

dart - 将 Blob 转换为列表<int>

android - 通过Flutter中的APK安装应用程序时如何查看调试控制台?

dart - 有没有办法在 Dart 的类中动态调用方法或设置实例变量?

dart - 如何初始化烟雾