获取具有注释的所有类的ClassMirror实例 [英] Getting ClassMirror instances for all classes that have an annotation
本文介绍了获取具有注释的所有类的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屋!
查看全文