gpt4 book ai didi

dart - 通过 getField 镜像获取类变量的值

转载 作者:行者123 更新时间:2023-12-03 03:19:02 24 4
gpt4 key购买 nike

我试图了解 Mirrors Api 的工作原理。具体来说,如何从它的Symbol中获取一个字段的值, 使用 getField .

对于getField方法,它应该适用于任何 Symbol这是一个 setter/getter ,它可能是隐含的。因此,我理解 getField可以直接在字段上调用。在以下代码示例中,a 的 getter和 b应该被隐式定义。

但是代码抛出,提示它找不到任何 setter/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
}

必须明确定义一个 setter/getter 才能使其工作感觉是错误的,但我不明白为什么这不起作用。当然,mirrors.dart 仍然有很大的变化,所以我认为这是针对 v1.2.0 的。

最佳答案

您正在尝试运行 getField在类(class)镜子上。由于ab是实例字段 getField失败。如果您更改 abstatic getField调用将起作用。

或者,您需要调用 getField在实例镜像 (im) 上。

关于dart - 通过 getField 镜像获取类变量的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22873896/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com