美文网首页Flutter
Dart中的反射

Dart中的反射

作者: 三米板 | 来源:发表于2019-09-19 18:29 被阅读0次

先上例子:

import 'dart:mirrors';

class MyClass {
  int i, j;
  void my_method() {  }

  int sum() => i + j;

  MyClass(this.i, this.j);

  static noise() => 42;

  static var s;
}

main() {
  MyClass myClass = new MyClass(3, 4);
  InstanceMirror myClassInstanceMirror = reflect(myClass);

  ClassMirror MyClassMirror = myClassInstanceMirror.type;// 反射MyClass

  InstanceMirror res = myClassInstanceMirror.invoke(#sum, []);
  print('sum = ${res.reflectee}');

  var f = MyClassMirror.invoke(#noise, []);
  print('noise = $f');

  print('\nMethods:');
  Iterable<DeclarationMirror> decls =
      MyClassMirror.declarations.values.where(
        (dm) => dm is MethodMirror && dm.isRegularMethod);
  decls.forEach((MethodMirror mm) {
    print(MirrorSystem.getName(mm.simpleName));
  });

  print('\nAll declarations:');
  for (var k in MyClassMirror.declarations.keys) {
    print(MirrorSystem.getName(k));
  }

  MyClassMirror.setField(#s, 91);
  print(MyClass.s);
}

输出结果:

sum = 7
noise = InstanceMirror on 42

Methods:
my_method

sum

noise

All declarations:
i
j
s
my_method

sum
noise
MyClass
91

另外,我们可以反射Class

ClassMirror cm = reflectClass(MyClass); // 反射MyClass
//如果我们已经获得了一个类的反射 cm ,我们可以打印 cm 反射的类所有声明的名称。
for (var m in cm.declarations.values) 
  print(MirrorSystem.getName(m.simpleName));

相关文章

网友评论

    本文标题:Dart中的反射

    本文链接:https://www.haomeiwen.com/subject/fvzhyctx.html