我试图了解 Mirrors Api 的工作原理。具体来说,如何Symbol
使用getField
.
对于该getField
方法,它应该适用于任何Symbol
作为 getter 的方法,并且它可能是隐式的。因此,我理解这一点getField
可以直接在字段上调用。在下面的代码示例中,应该隐式定义a
and的 getter。b
但是代码抛出,抱怨它找不到任何吸气剂。
Breaking on exception: object of NoSuchMethodError
, 并在 'dart:mirrors-patch_mirrors_impl.dart'native "ClassMirror_invokeGetter";
abstract class CheckInitialized {
bool hasNull() {
var im = reflect(this);
var cm = im.type;
cm.declarations.values.where((dm) => dm is VariableMirror)
.forEach((vm) {
print(cm.getField(vm.simpleName));
});
// If field is null, return true
// If no fields are null, return false
}
}
class Test extends CheckInitialized {
int a;
String b;
}
void main() {
var a = new Test();
print(a.hasNull()); // true
}
必须明确定义一个吸气剂才能使其工作感觉是错误的,但我不明白为什么这不起作用。当然,mirrors.dart 仍然有很大的变化,所以我认为这是针对 v1.2.0 的。