如何获取注释值'使用'

时间:2016-01-10 21:31:55

标签: groovy annotations

我想从used检索注释值MyAnnot。即使只有2个,我也会在列表中获得3个注释。此外,我尝试获取used的{​​{1}}字段,但没有成功。我想返回一张地图,其中MyAnnot MyAnnot是关键,used是地图的价值。

type

1 个答案:

答案 0 :(得分:0)

首先,您需要使用:@Retention(RetentionPolicy.RUNTIME)标记注释,以使其在运行时可用于处理,因此它将是:

@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnot {
    String used()
    String type()
}

然后,usedtype不是字段,也不是属性,而是方法,因此必须调用获取< / 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)

请注意,仅传递一类注释是不够的,因为您不知道要在注释上调用的方法(usedtype)。以下方法仅适用于MyAnnot类。