gpt4 book ai didi

dart - 反射(reflect)非进口类

转载 作者:行者123 更新时间:2023-12-03 02:57:14 24 4
gpt4 key购买 nike

我正在尝试获取动态类名称的属性(也试图实例化它)但下一个代码不起作用,因为我认为我需要导入在文件中包含类代码的 dart 文件我想反射(reflect)一下:

//I import the file in other Dart file
import 'MyClass.dart'; //This only have a class named MyClass with some properties
import 'OtherClass.dart'

class mainClass {
void mainFunction () {
var properties = OtherClass.getProperties('MyClass');
}
}

这是 OtherClass 的内容:

import "dart:mirrors";

class OtherClass {
static getProperties (String className) {
ClassMirror cm = reflectClass(className);
for (var m in cm.declarations.values)
print(MirrorSystem.getName(m.simpleName));
}
}

有没有反射(reflect)实际 Dart 文件中没有导入的类?

希望这是有道理的,提前致谢。

最佳答案

您需要先找到包含该类的库。使用 currentMirrorSystem().libraries 将所有库导入您的应用程序。如果您想避免歧义,请将唯一的库声明添加到您的库并将库名称传递给 getProperties() 以进行精确查找。

import "dart:mirrors";

class OtherClass {
static getProperties(String className) {
var classSymbol = new Symbol(className);
var libs = currentMirrorSystem().libraries;
var foundLibs = libs.keys.where((lm) =>
libs[lm].declarations.containsKey(classSymbol) &&
libs[lm].declarations[classSymbol] is ClassMirror);
if (foundLibs.length != 1) {
throw 'None or more than one library containing "${className}" class found';
}
ClassMirror cm = libs[foundLibs.first].declarations[classSymbol];
for (var m
in cm.declarations.values) print(MirrorSystem.getName(m.simpleName));
}
}

关于dart - 反射(reflect)非进口类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33490144/

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