1

以前のバージョンの dart では、getter を使用して取得できました。

cm.getters.values

この回答に投稿されているように: https://stackoverflow.com/a/14505025/2117440

ただし、実際のバージョンは削除され、機能が削除されて置き換えられました

cm.declarations.values

最後のコードは、すべての属性、ゲッター、セッター、メソッド、およびコンストラクターを取得します。他の方法を使わずに「ゲッターと属性」だけを取得する方法があれば教えていただきたいです。

私が現在使用しているコードは次のとおりです。

import "dart:mirrors";

class MyNestedClass {
  String name;
}
class MyClass {
  int i, j;
  MyNestedClass myNestedClass;
  int sum() => i + j;

  MyClass(this.i, this.j);
}

void main() {
  MyClass myClass = new MyClass(3, 5)
    ..myNestedClass = (new MyNestedClass()..name = "luis");
  print(myClass.toString());
  InstanceMirror im = reflect(myClass);

  ClassMirror cm = im.type;

  Map<Symbol, MethodMirror> instanceMembers = cm.instanceMembers;

  cm.declarations.forEach((name, declaration) {
      if(declaration.simpleName != cm.simpleName) // If is not te constructor
        print('${MirrorSystem.getName(name)}:${im.getField(name).reflectee}');
  });
}

前のコードでわかるように、 がコンストラクターでないかどうかを確認するには、 を と比較する必要がありdeclaration.simpleNameますcm.simpleName。文字列を比較しているので、私が理解するまでは非効率的です。

結論として、この問題を解決するためのより良い方法があるかどうかを知りたいです。

4

1 に答える 1