我无法通过调用默认构造函数来创建 ClassMirror 的新实例

I can't create a new instance of a ClassMirror by calling the defaullt constructor

我有两个classes

class ESVAPI extends BibleProvider {
  ESVAPI() : super('esvapi', true, {'esv'});

 ...methods
}
abstract class BibleProvider {
  ...fields

  BibleProvider(this.name, this._requiresKey, this._versions) {
    Bible.addProvider(this, _versions.toList());
  }
}

我打算让多个 class 扩展抽象 class,所以我想创建一个方法来创建每个 BibleProvider 的子 [=24] 的实例=]是的,我在这里创建了一个:

  ClassMirror classMirror = reflectClass(BibleProvider);
  List<DeclarationMirror> subClassMirrors = currentMirrorSystem()
      .libraries
      .values
      .expand((lib) => lib.declarations.values)
      .where((lib) {
    return lib is ClassMirror &&
        lib.isSubclassOf(classMirror) &&
        lib != classMirror;
  }).toList();
  DeclarationMirror subClassDec = subClassMirrors[0];
  ClassMirror ESVCLASS = reflectClass(subClassDec.runtimeType);
  var esvObj = ESVCLASS.newInstance(const Symbol(''), []);

但是在 ESVCLASS.newInstance 我收到了这个异常:

No constructor '_ClassMirror' declared in class '_ClassMirror'

我认为这可能与我如何使用“硬编码”值在构造函数中调用 superclass 有关。如果是这种情况,有没有办法调用 subclass' 构造函数并让它调用超级构造函数?我不完全确定。熟悉反射的朋友知道是怎么回事吗?

将最后三行更改为:

  ClassMirror subClassDec = subClassMirrors[0] as ClassMirror;
  var esvObj = subClassDec.newInstance(const Symbol(''), []);
  ...
  print(esvObj.reflectee.runtimeType); // ESVAPI

你正在反思已经是 镜像 的东西,所以你的 ESVCLASS 成为 class 的 class 镜像 _ClassMirror 本身,而不是上面找到的 BibleProvider 的子 class。 直接使用subClassDecclass镜像即可。