我正在尝试获取Annotation中指定的值/值。
例如:如果@SuppressWarnings("unchecked")
是注释,我想获取值 - 未选中。
public boolean visit(SingleMemberAnnotation annotation) {
// returns the type name of the annotation - SuppressWarnings
annotation.getTypeName();
return true;
}
没有在Annotation类中看到任何方法来检索它们 任何帮助/指示表示赞赏
答案 0 :(得分:1)
当您访问SingleMemberAnnotation
时,您应该查看SingleMemberAnnotation
课而不是Annotation
。 As 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,我怀疑您是否可以访问它。