1

我试图了解 Mirrors Api 的工作原理。具体来说,如何Symbol使用getField.

对于该getField方法,它应该适用于任何Symbol作为 getter 的方法,并且它可能是隐式的。因此,我理解这一点getField可以直接在字段上调用。在下面的代码示例中,应该隐式定义aand的 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 的。

4

1 回答 1

3

您正在尝试getField在类镜像上运行。由于ab是实例字段,因此getField失败。如果您更改a并且b调用staticgetField起作用。

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

于 2014-04-05T02:26:20.713 回答