如何在Dart中动态地从字符串获取类名,然后创建一个实例?

3
我希望能够做到类似以下的事情:
class MyClass() {...}

var class_name = "MyClass"; // user input here
new class_name();           // so here, class_name is supposed to be a class constant

有人可以提供一个简单的方法吗?

1
这个问题是一天前提出的... - Fox32
可能是重复的问题:如何从字符串实例化一个类 - Fox32
这个问题是一个重复的问题,但是答案已经不再适用了。自一月以来发生了太多的变化。 - Dennis Kaselow
更新旧问题怎么样,而不是创建一个新的?这样其他用户就不会尝试使用不起作用的答案了。 - Fox32
1个回答

3

有一种方法是:

library my_library;

import 'dart:mirrors';

void main() {
  var userInput = 'MyClass';
  var symbol = new Symbol(userInput);
  var myClasses = currentMirrorSystem().findLibrary(#my_library).declarations.values.where((dm) => dm is ClassMirror);
  var cm = myClasses.firstWhere((cm) => cm.simpleName == symbol);
  var instance = cm.newInstance(const Symbol(''), []).reflectee;
}

class MyClass {}

如果你编译为JS,还应考虑使用@MirrorsUsed,否则生成的JS文件大小将非常大。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接