Dart 通过名称为 class 的字符串创建 class 实例

Dart create class instance by string with class name

我想通过字符串中的名称调用 class 的函数。我知道我最好的选择是镜子。

var ref = reflect(new TestClass());
ref.invoke(Symbol("test"), []);

很好用,我可以通过字符串调用函数测试。但我也想把“TestClass”放在一个字符串中。有可能吗?

var ref = reflect("TestClass");
ref.invoke(Symbol("test"), []);

乔纳斯

你可以这样做:

import 'dart:mirrors';

class MyClass {
  static void myMethod() {
    print('Hello World');
  }
}

void main() {
  callStaticMethodOnClass('MyClass', 'myMethod'); // Hello World
}

void callStaticMethodOnClass(String className, String methodName) {
  final classSymbol = Symbol(className);
  final methodSymbol = Symbol(methodName);

  (currentMirrorSystem().isolate.rootLibrary.declarations[classSymbol]
          as ClassMirror)
      .invoke(methodSymbol, <dynamic>[]);
}

请注意,此实现确实要求 myMethod 是静态的,因为我们从不创建任何对象,而只是直接对 class 本身进行操作。您可以通过在 ClassMirror 上调用 newInstance 从 class 创建新对象,但您随后需要调用构造函数。

但我希望这就足够了。如果没有,请询​​问,我可以尝试添加更多示例。