DART: Comment convertir des noms d'identifiant variable uniquement pour les variables d'un certain type

StackOverflow https://stackoverflow.com//questions/23025743

  •  21-12-2019
  •  | 
  •  

Question

Utiliser DART ici.

Comme le titre ci-dessus suggère, j'ai une classe (illustrée ci-dessous) qui a trois variables d'instance Bool.Ce que je veux faire, c'est créer une fonction qui inspecte les noms d'identifiant de ces variables d'instance et imprime chacune d'elles dans une chaîne.Les .Declarations getter qui sont livrés avec la classe Classmirror presque cela, sauf cela me donne également le nom du constructeur et toute autre méthode que j'ai dans la classe.Ce n'est pas bien.Donc, vraiment ce que je veux, c'est un moyen de filtrer par type (c'est-à-dire, ne me donnez que les identificateurs booléens tels que des chaînes.) Toute façon de le faire?

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));

    }

  }

}

sortie est: est marié isboard2 isboard3 boolstostrings Booleanholder

Était-ce utile?

La solution

exemple de code.

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;
}

sortie:

bool1
bool2
int1
int2

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top