我试图理解Mirrors Api是如何工作的。具体来说,如何使用getField
从字段的Symbol
中获取字段的值。
对于getField
方法,它应该适用于任何 getter Symbol
,并且可能是隐式的。因此,我理解getField
可以直接在田野上调用。在下面的代码示例中,应隐式定义 a
和 b
的 getter。
但是代码抛出,抱怨它找不到任何getter。 Breaking on exception: object of NoSuchMethodError
,并在native "ClassMirror_invokeGetter";
上打破了"dart:mirrors-patch_mirrors_impl.dart"
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
}
必须明确定义一个 getter 才能正常工作感觉是错误的,但我不明白为什么这不起作用。当然,mirrors.dart仍然有很大的变化,所以我建议这是针对v1.2.0的。
您正在尝试在类镜像上运行getField
。由于a
和b
是实例字段,因此getField
失败。如果将a
和b
更改为static
则getField
调用将起作用。
或者,您需要在实例镜像 ( im
) 上调用 getField
。