如何找到相应的二传手和吸气剂?

时间:2014-05-28 18:26:13

标签: reflection dart dart-mirrors

使用dart:mirrors库如何找到任何类镜像的所有相应的getter和setter。

class Person {
  String _name;
  Person(this._name);
  String get name => _name;
  set name (String value) {_name = value;}
}

在这个例子中,我想找到" name" setter和getter方法在没有关于类的任何先验知识的情况下对它们进行分组。

有没有办法正确地做到这一点?或者我应该通过使用类镜像的instanceMembers来破解我的方式,或许将setter符号转换为字符串或类似的东西?

1 个答案:

答案 0 :(得分:3)

你可以列出这样的getter和setter:

import 'dart:mirrors';

class Person {
  String _name;
  Person(this._name);
  String get name => _name;
  set name (String value) {_name = value;}
  void bar() {

  }
}

void main() {
  ClassMirror mirror = reflectClass(Person);
  mirror.declarations.forEach((Symbol symbol, DeclarationMirror declaration) {
    if(declaration is MethodMirror) {
      if(declaration.isSetter) {
        print('setter: ' + MirrorSystem.getName(declaration.simpleName));
      }

      if(declaration.isGetter) {
        print('getter: ' + MirrorSystem.getName(declaration.simpleName));
      }
    }
  });
}

输出:

getter: name
setter: name=

这就是你需要的吗?我认为你不能以不同的方式做到这一点。

我认为你不能直接得到变量(_name)。您可以使用declaration.source获取源代码。也许你可以在这里做一些分裂。 :)

这有帮助吗?

此致 罗伯特