Отражать не импортированный класс

Я пытаюсь получить свойства динамического имени класса (также пытаюсь создать его экземпляр), но следующий код не работает, потому что я думаю, что мне нужно импортировать файл 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));
  }
}
Другие вопросы по тегам