2014-04-12 57 views
2

在此處使用Dart。Dart:如何將變量標識符名稱轉換爲僅適用於特定類型變量的字符串

如上面的標題所示,我有一個類(如下所示),它有三個bool實例變量。我想要做的是創建一個函數,檢查這些實例變量的標識符名稱,並將它們中的每一個輸出到字符串中。 ClassMirror類的ALMOST附帶的聲明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)); 

    } 

    } 

} 

輸出爲: isMarried isBoard2 isBoard3 boolsToStrings BooleanHolder

回答

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