Dart语言基础之反射

import 'dart:mirrors';
import 'dart_metadata.dart';

@Todo("me", "class")
class MirrorTest {
  static num staticvar;
  static num _staticvar;

  num instancevar;
  static const num constvar = 1;
  final num fialvar;

  @Todo("me", "var")
  num metadatavar;

  MirrorTest({this.fialvar, this.instancevar});

  static void staticMethod() {
    print("staticMethod");
  }

  void instanceMethod() {
    print("instanceMethod");
  }

  @Todo("me", "method")
  void metadataMethod() {}
}

void main(List<String> args) {
  var classMirror = reflectClass(MirrorTest);

  /// Named Contructor
  var instanceMirror = classMirror.newInstance(
      Symbol.empty, [], {Symbol("fialvar"): 0, Symbol("instancevar"): 2});
  MirrorTest instance = instanceMirror.reflectee;
  print(instance.runtimeType);

  /// Class level metadata
  classMirror.metadata.forEach((metadata) {
    print(metadata.reflectee.who + "==>" + metadata.reflectee.what);
  });

  ///invoke static method
  classMirror.invoke(Symbol("staticMethod"), []);

  ///invoke instanceMirror method
  instanceMirror.invoke(Symbol("instanceMethod"), []);

  ///print all fields name, metadatas
  classMirror.declarations.forEach((Symbol key, DeclarationMirror value) {
    if (value is VariableMirror) {
      print("|" + value.simpleName.toString());
      print("--" + value.runtimeType.toString());
      print("--" + value.type.toString());
      print("--" + value.type.reflectedType.toString());
      value.metadata.forEach((metadata) {
        print("---" + metadata.reflectee.who + "==>" + metadata.reflectee.what);
      });
    }
  });

  ///print all mehtods,metadatas
  classMirror.declarations.forEach((Symbol key, DeclarationMirror value) {
    if (value is MethodMirror) {
      print(value.simpleName);
      value.metadata.forEach((metadata) {
        print("---" + metadata.reflectee.who + "==>" + metadata.reflectee.what);
      });

      value.parameters.forEach((param) {
        param.metadata.forEach((metadata) {
          print(
              "---" + metadata.reflectee.who + "==>" + metadata.reflectee.what);
        });
      });
    }
  });
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 介绍了如何在20分钟内读完一本书,主要采取“共振阅读法”。 首先要转变思维,对阅读有新的认识,摒弃以前一字一句地阅...
    毛毛虫爱企鹅阅读 521评论 0 0
  • 也许只有等到最后一刻,才能痛下决心,带走什么,扔掉什么吧。从定下房子那一天起,每逢周末,总是各种收拾,不能用不会再...
    卜悠悠阅读 226评论 2 1
  • 姓名:吴龙飞 公司:杭州简品食品股份有限公司 组别:利他一组 【日精进打卡...
    加了冰的咖啡阅读 116评论 0 0
  • 原句 The overall result has been to make entrance to profes...
    阿飞fighting阅读 269评论 0 0