首页 > 解决方案 > DART 查找类中的所有字段

问题描述

有人可以提供一个示例如何获取课堂上的所有字段吗?

例如:

class A{
  String aa;
  String bb;
  static String ss;
  string simple(){
    return 'simple';
  }
  getallMemberFields(){
   // returun ["aa", "bb"]
 }
}

标签: dart

解决方案


如果您询问反射,这里有一个示例,说明如何不仅获取变量和函数名称,还获取有关它们的一些额外信息

import 'dart:mirrors';

class A {
  String aa;
  String bb;
  static String ss;
  String simple() {
    return 'simple';
  }

  getallMemberFields() {
    // returun ["aa", "bb"]
  }
}

void main() {
  InstanceMirror instance_mirror = reflect(new A());
  var class_mirror = instance_mirror.type;

  for (var v in class_mirror.declarations.values) {
    var name = MirrorSystem.getName(v.simpleName);

    if (v is VariableMirror) {
      print('Variable: $name');
      print(
          'Static: ${v.isStatic}, Private: ${v.isPrivate}, Final: ${v.isFinal}, Const: ${v.isConst}');
    } else if (v is MethodMirror) {
      print('Method: $name');
      print(
          'Static: ${v.isStatic}, Private: ${v.isPrivate}, Abstract: ${v.isAbstract}');
    }
  }
}

印刷:

Variable: aa
Static: false, Private: false, Final: false, Const: false
Variable: bb
Static: false, Private: false, Final: false, Const: false
Variable: ss
Static: true, Private: false, Final: false, Const: false
Method: simple
Static: false, Private: false, Abstract: false
Method: getallMemberFields
Static: false, Private: false, Abstract: false
Method: A
Static: false, Private: false, Abstract: false

推荐阅读