1

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

4

2 回答 2

5

您可以从类的实例或从定义类的库中获取 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 对象。

例如,这里是如何在 'dart:core' 库中定义的 StringBuffer 类上获取 ClassMirror:

var mirrorSystem = currentMirrorSystem();
var libraryMirror = mirrorSystem.findLibrary(const Symbol('dart.core')).first;
var classMirror = libraryMirror.declarations[const Symbol('StringBuffer')];
MirrorSystem.getName(classMirror.simpleName); // 'StringBuffer'
于 2013-06-19T17:08:10.997 回答
3
ClassMirror classMirror = reflectClass(Foo);
于 2013-06-20T00:05:36.947 回答