DART: Cómo convertir nombres de identificadores variables a cadenas solo para variables de un cierto tipo

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

  •  21-12-2019
  •  | 
  •  

Pregunta

usando dardos aquí.

Como sugiere el título anterior, tengo una clase (que se muestra a continuación) que tiene tres variables de instancia de BOOL.Lo que quiero hacer es crear una función que inspeccione los nombres de identificadores de estas variables de instancia e imprime cada una de ellas en una cadena.El .Declarations Getter que viene con la clase de Classmirror casi hace esto, excepto que también me da el nombre del constructor y cualquier otro método que tenga en la clase.Esto no está bien.Así que realmente lo que quiero es una forma de filtrar por tipo (es decir, solo dame los identificadores booleanos como cuerdas). ¿Alguna forma de hacer esto?

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

    }

  }

}

la salida es: está casada isboard2 isboard3 boolstostrings Booleanholder

¿Fue útil?

Solución

Código de muestra.

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

Salida:

bool1
bool2
int1
int2

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top