如何在Dart类上获取ClassMirror?

时间:2013-06-19 17:08:11

标签: dart dart-mirrors

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

2 个答案:

答案 0 :(得分:4)

您可以从类的实例或定义类的库中获取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属性返回一个映射,其中包含键 是类名(表示为符号),值是关联的 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'

答案 1 :(得分:2)

ClassMirror classMirror = reflectClass(Foo);