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);
        });
      });
    }
  });
}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 介紹了如何在20分鐘內讀完一本書,主要采取“共振閱讀法”。 首先要轉變思維,對閱讀有新的認識,摒棄以前一字一句地閱...
    毛毛蟲愛企鵝閱讀 563評論 0 0
  • 也許只有等到最后一刻,才能痛下決心,帶走什么,扔掉什么吧。從定下房子那一天起,每逢周末,總是各種收拾,不能用不會再...
    卜悠悠閱讀 262評論 2 1
  • 姓名:吳龍飛 公司:杭州簡品食品股份有限公司 組別:利他一組 【日精進打卡...
    加了冰的咖啡閱讀 135評論 0 0
  • 原句 The overall result has been to make entrance to profes...
    阿飛fighting閱讀 284評論 0 0

友情鏈接更多精彩內容