获取具有注释的所有类的ClassMirror实例 [英] Getting ClassMirror instances for all classes that have an annotation

查看:152
本文介绍了获取具有注释的所有类的ClassMirror实例的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这个注释

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

和两个用它注释的类

@Target("/313")
class c1{

}

@Target("/314")
class c2{

}

我如何得到一个 ClassMirror 实例的类有Target注释的实例?

how can i get a List of ClassMirror instances for the classes that have the Target annotation?

根据选择的答案,如果我知道什么库我的calsses存在

based on the selected answer that is if i knew what library my calsses exist in

  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')

This searches all libraries in the current isolate for classes that are annotated with @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)< br>
found:Symbol(c1)

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

这篇关于获取具有注释的所有类的ClassMirror实例的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆