Dart通过具有类名的字符串创建类实例

Dart通过具有类名的字符串创建类实例,dart,dart-mirrors,Dart,Dart Mirrors,我希望通过字符串中的名称调用类的函数。我知道我最好的选择是镜子 var ref = reflect(new TestClass()); ref.invoke(Symbol("test"), []); 它工作正常,我可以通过字符串调用函数测试。但我还想把“TestClass”放在一个字符串中。有可能吗 var ref = reflect("TestClass"); ref.invoke(Symbol("test"), []); 乔纳斯

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

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>[]);
}
导入“dart:mirrors”;
类MyClass{
静态void方法(){
打印(“Hello World”);
}
}
void main(){
callStaticMethodOnClass('MyClass','myMethod');//Hello World
}
void callStaticMethodOnClass(字符串类名称、字符串方法名称){
最终类符号=符号(类名称);
最终方法符号=符号(方法名称);
(currentMirrorSystem().isolate.rootLibrary.declarations[classSymbol]
作为类镜像)
.invoke(methodSymbol,[]);
}
注意,这个实现确实要求
myMethod
是静态的,因为我们从不创建任何对象,而只直接对类本身进行操作。您可以通过调用
ClassMirror
上的
newInstance
从类中创建新对象,但随后需要调用构造函数

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