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

时间:2014-04-04 22:11:36

标签: dart dart-mirrors

我想了解Mirrors Api是如何工作的。具体而言,如何使用SymbolgetField获取字段的值。

对于getField方法,它应该适用于任何作为getter的Symbol,并且它可能是隐式的。因此,我理解getField可以直接在字段上调用。在以下代码示例中,应明确定义ab的getter。

但代码抛出,抱怨它找不到任何吸气剂。 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
}

为此必须明确定义一个getter是错误的,但我不明白为什么这不起作用。当然,mirrors.dart仍然在变化,所以我认为这是针对v1.2.0。

1 个答案:

答案 0 :(得分:3)

您正在尝试在类镜像上运行getField。由于ab是实例字段,getField失败。如果您将ab更改为static,则getField调用将有效。

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