Отражать не импортированный класс
Я пытаюсь получить свойства динамического имени класса (также пытаюсь создать его экземпляр), но следующий код не работает, потому что я думаю, что мне нужно импортировать файл dart с кодом класса в файл, где я хочу отразить это:
//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));
}
}
в любом случае, чтобы отразить класс, который не импортируется в фактический файл Dart?
Надеюсь, что это имеет смысл, спасибо заранее.
1 ответ
Сначала вам нужно найти библиотеку, содержащую класс. использование 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));
}
}