gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 04:09:24 25 4
gpt4 key购买 nike

如何使用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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com