Dart - 类来自字符串 - 来自string的类实例

时间:2015-11-10 12:47:34

标签: dart dart-mirrors

我想知道是否有可能通过名称(String)找出一个类(在同一个库中),以及是否可以从名称(String)创建一个类的实例。

在PHP中,您可以这样做:

$className = 'SomeClass';
if (class_exists($className))
    $instance = new $className;

2 个答案:

答案 0 :(得分:0)

在发布此答案时,解决方案并不像PHP那样简单,但可以通过这种方式进行管理:

String className = 'SomeClass';
if (currentMirrorSystem().isolate.rootLibrary.declarations.keys.join('').contains('Symbol("${className}")'))
    var instance = currentMirrorSystem().isolate.rootLibrary.declarations[new Symbol(className)].newInstance(new Symbol(''), []).reflectee;

在字符串中搜索是一种顽皮的方法,但这是我能够让它独立工作的最简单方法。

接下来,您可以简单地调用实例的属性:

instance.method();

希望它有所帮助。

答案 1 :(得分:0)

我会更喜欢

import 'dart:mirrors';

class SomeClass {}

main() {
  String className = 'SomeClass';
  var instance;

  ClassMirror cm = currentMirrorSystem().isolate.rootLibrary.declarations[
      new Symbol(className)];
  if (cm != null) {
    instance = cm.newInstance(new Symbol(''), []).reflectee;
  }
  print(instance);
}