dart - 获取所有具有注释的类的 ClassMirror 实例

标签 dart dart-mirrors

我有这个注释

class Target{
  final String value;
  const Target(this.value);
}

以及用它注释的 2 个类

@Target("/313")
class c1{

}

@Target("/314")
class c2{

}

如何获取具有 Target 注释的类的 ClassMirror 实例列表?

基于所选的答案,即如果我知道我的类(class)存在于哪个图书馆

  var mirrorSystem = currentMirrorSystem();
  var libraryMirror = mirrorSystem.findLibrary(#testlib);
  for(ClassMirror classMirror in libraryMirror.declarations.values){
    if(classMirror.metadata!=null){
      for(var meta in classMirror.metadata){
            if(meta.type == reflectClass(Path)){
              print(classMirror.simpleName);
              print(meta.getField(#value));
            }
          }
    }
  }

最佳答案

这将搜索当前隔离中的所有库,以查找使用 @Target('/313') 注释的类

@MirrorsUsed(metaTargets: Target) // might be necessary when you build this code to JavaScript
import 'dart:mirrors';

class Target {
  final String id;
  const Target(this.id);
}

@Target('/313')
class c1{

}

@Target('/314')
class c2{

}

@Target('/313')
@Target('/314')
class c3{

}

void main() {
  MirrorSystem mirrorSystem = currentMirrorSystem();
  mirrorSystem.libraries.forEach((lk, l) {
    l.declarations.forEach((dk, d) {
      if(d is ClassMirror) {
        ClassMirror cm = d as ClassMirror;
        cm.metadata.forEach((md) {
          InstanceMirror metadata = md as InstanceMirror;
          if(metadata.type == reflectClass(Target) && metadata.getField(#id).reflectee == '/313') {
            print('found: ${cm.simpleName}');
          }
        });
      }
    });
  });
}

found: Symbol("c3")
found: Symbol("c1")

关于dart - 获取所有具有注释的类的 ClassMirror 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24457283/

相关文章:

plugins - 达特镜的 future

dart - 编译的AngularDart失败,并出现dynamic_injector错误

firebase - 新增: '_InternalLinkedHashMap<String, dynamic>'类型不是 'DocumentSnapshot'类型的子类型

requirejs - Dart2js : Is it possible to start Root Isolate from Javascript?

ide - 是否可以通过 'build-error-list'方式在WebStorm中查看Dart pub服务输出?

flutter - 快速拨号 : change color on click

firebase - 隔离和管理由登录用户完成的集合CRUD-Firebase和Flutter

mocking - dart-模拟,按名称调用的方法名,重构失败

dart - 如何在 Dart 中动态(从字符串中)获取类名,然后创建一个实例?

class - 在 Dart 中,使用 Mirrors,如何从类的实例调用类的静态方法?