我无法通过调用默认构造函数来创建 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。
直接使用subClassDec
class镜像即可。
我有两个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。
直接使用subClassDec
class镜像即可。