Dart:如何将变量标识符名称仅转换为特定类型的变量的字符串

时间:2014-04-12 03:29:12

标签: dart dart-mirrors

在这里使用Dart。

正如上面的标题所示,我有一个类(如下所示),它有三个bool实例变量。我想要做的是创建一个函数,检查这些实例变量的标识符名称,并在字符串中打印出每个变量。 ClassMirror类ALMOST附带的.declarations getter执行此操作,除了它还为我提供了构造函数的名称以及我在类中的任何其他方法。这不好。所以我想要的是一种按类型过滤的方法(即,只给我布尔标识符作为字符串。)任何方法都可以这样做吗?

class BooleanHolder {

  bool isMarried = false;
  bool isBoard2 = false;
  bool isBoard3 = false; 

 List<bool> boolCollection; 

  BooleanHolder() {


  }

   void boolsToStrings() {

     ClassMirror cm = reflectClass(BooleanHolder);
     Map<Symbol, DeclarationMirror> map = cm.declarations;
     for (DeclarationMirror dm in map.values) {


      print(MirrorSystem.getName(dm.simpleName));

    }

  }

}

输出是: 已经结婚 isBoard2 isBoard3 boolsToStrings BooleanHolder

1 个答案:

答案 0 :(得分:1)

示例代码。

import "dart:mirrors";

void main() {
  var type = reflectType(Foo);
  var found = filter(type, [reflectType(bool), reflectType(int)]);
  for(var element in found) {
    var name = MirrorSystem.getName(element.simpleName);
    print(name);
  }
}

List<VariableMirror> filter(TypeMirror owner, List<TypeMirror> types) {
  var result = new List<VariableMirror>();
  if (owner is ClassMirror) {
    for (var declaration in owner.declarations.values) {
      if (declaration is VariableMirror) {
        var declaredType = declaration.type;
        for (var type in types) {
          if (declaredType.isSubtypeOf(type)) {
            result.add(declaration);
          }
        }
      }
    }
  }

  return result;
}

class Foo {
  bool bool1 = true;
  bool bool2;
  int int1;
  int int2;
  String string1;
  String string2;
}

输出:

bool1
bool2
int1
int2