Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart-class存在于字符串中-class实例存在于字符串中_Dart_Dart Mirrors - Fatal编程技术网

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

Dart-class存在于字符串中-class实例存在于字符串中,dart,dart-mirrors,Dart,Dart Mirrors,我想知道是否有可能通过名称(字符串)确定类(在同一个库中)是否存在,以及是否有可能通过名称(字符串)创建类的实例 在PHP中,您可以这样做: $className = 'SomeClass'; if (class_exists($className)) $instance = new $className; 在发布此答案时,解决方案不像PHP中那样简单,但可以通过以下方式进行管理: String className = 'SomeClass'; if (currentMirrorSys

我想知道是否有可能通过名称(字符串)确定类(在同一个库中)是否存在,以及是否有可能通过名称(字符串)创建类的实例

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

我的代码检查器还不断警告我:“没有为类“DeclarationMirror”定义方法“newInstance”,但代码仍按预期工作。另请参阅