Dart - class 存在于字符串中 - class 来自字符串的实例

Dart - class exists from string - class instance from string

我想知道是否有可能通过名称(字符串)找出 class(在同一个库中)是否存在,以及是否有可能创建 [=18= 的实例] 来自名称(字符串)。

在 PHP 中,您可以这样做:

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

在发布此答案时,解决方案并不像 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();

希望对大家有所帮助。

我会更喜欢

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);
}