如何使用Mirrors API获取ClassMirror?我尝试使用顶级reflect()
函数,但这需要一个类实例,而不是一个类作为参数。
答案 0 :(得分:4)
您可以从类的实例或定义类的库中获取ClassMirror,也可以直接使用类名。
要获取有关类的信息,您需要一个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);