我想从used
检索注释值MyAnnot
。即使只有2个,我也会在列表中获得3个注释。此外,我尝试获取used
的{{1}}字段,但没有成功。我想返回一张地图,其中MyAnnot
MyAnnot
是关键,used
是地图的价值。
type
答案 0 :(得分:0)
首先,您需要使用:@Retention(RetentionPolicy.RUNTIME)
标记注释,以使其在运行时可用于处理,因此它将是:
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnot {
String used()
String type()
}
然后,used
和type
不是字段,也不是属性,而是方法,因此必须调用和获取< / em>的
脚本将是:
import java.lang.annotation.RetentionPolicy
import java.lang.annotation.Retention
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnot {
String used()
String type()
}
class MyClass {
@MyAnnot(used="Hey" ,type="There")
String fielda
@MyAnnot(used="denn", type="Ton")
String fieldc
}
def findAllPropertiesForClassWithAnotation( obj, annotClass ) {
def c = obj.getClass()
c.declaredFields.findAll { field ->
field.isAnnotationPresent(annotClass)
}.collect { found ->
def a = found.getAnnotation(annotClass)
[(a.used()): a.type()]
}.sum()
}
MyClass a = new MyClass(fielda: 'tim', fieldc: 'dennisStar')
println findAllPropertiesForClassWithAnotation(a, MyAnnot)
请注意,仅传递一类注释是不够的,因为您不知道要在注释上调用的方法(used
和type
)。以下方法仅适用于MyAnnot
类。