从Annotation获取价值

时间:2014-11-11 10:41:17

标签: java abstract-syntax-tree eclipse-jdt

我正在尝试获取Annotation中指定的值/值。

例如:如果@SuppressWarnings("unchecked")是注释,我想获取值 - 未选中

public boolean visit(SingleMemberAnnotation annotation) {

    // returns the type name of the annotation - SuppressWarnings
    annotation.getTypeName();       

    return true;
}

没有在Annotation类中看到任何方法来检索它们 任何帮助/指示表示赞赏

4 个答案:

答案 0 :(得分:1)

当您访问SingleMemberAnnotation时,您应该查看SingleMemberAnnotation课而不是AnnotationAs you can see它有getValue方法,返回Expression。这是一个简化的情况,您只有@SuppressWarnings("unchecked")中的一个表达式。

对于普通注释,您将遇到一个NormalAnnotation,它将包含一个值列表,您可以使用直观命名的方法values()来检索这些值。

因此,由于这两种类型的注释节点在如何检索值方面有所不同,因此在它们的公共Annotation基类中没有这样的方法。对于不可变节点,可以将它们更抽象地表示为单个成员注释的值作为大小为1的列表,但是,由于这些AST节点是可变的,即NormalAnnotation.values()返回的列表支持添加,它可以'在基类上提供。

答案 1 :(得分:0)

你必须按班级

来做
    for (Annotation annotation : YourClass.class.getAnnotations()) {
        Class<Annotation> type = annotation.annotationType();
        System.out.println("Values of " + type .getName() + ":");

        for (Method method : type.getDeclaredMethods()) {
            System.out.println(" " + method.getName() + ": " +
                               method.invoke(annotation, null));
        }
    }

答案 2 :(得分:0)

假设你有一个名为Test with SupressWarning的类,你应该这样做:

Test.class.getAnnotation(SuppressWarnings.class).value;

答案 3 :(得分:0)

据我所知,您只能使用具有运行时保留策略的getAnnotation访问注释,但SuppressWarnings的保留策略为Source,我怀疑您是否可以访问它。