DART:特定の型の変数に対してのみ変数識別子名を文字列に変換する方法

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

  •  21-12-2019
  •  | 
  •  

質問

ここでダーツを使って

上記のタイトルが示唆しているので、3つのBOOLインスタンス変数を持つクラス(以下に示す)があります。私がやりたいことは、これらのインスタンス変数の識別子名を検査し、それらのそれぞれを文字列に印刷する関数を作成することです。ClassMirrorクラスに付属の.declaration 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 ブーストストリング ブールホルダー

役に立ちましたか?

解決

サンプルコード

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
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top