Java注释如何获取特定注释的当前ElementType
我的注解:Java注释如何获取特定注释的当前ElementType,java,annotations,Java,Annotations,我的注解: @Target({ElementType.TYPE,ElementType.FIELD}) @保留(RetentionPolicy.RUNTIME) public@interface ObjectName{ 字符串名()默认为“”; 字符串字段()默认为“”; } 带注释的某个类 @ObjectName(“a”) 公共A类{ @ObjectName(“字段名称”) 字符串字段; } 问题-当我从上面的类中获取所有“ObjectName”注释时,如何获取注释的ElementType
@Target({ElementType.TYPE,ElementType.FIELD})
@保留(RetentionPolicy.RUNTIME)
public@interface ObjectName{
字符串名()默认为“”;
字符串字段()默认为“”;
}
带注释的某个类
@ObjectName(“a”)
公共A类{
@ObjectName(“字段名称”)
字符串字段;
}
问题-当我从上面的类中获取所有“ObjectName”注释时,如何获取注释的ElementType值(字段、类或方法类型)?所以我想要这样的东西
公共作废流程(clazz类){
Annotation[]annotations=clazz.getAnnotations();
对于(注释注释注释:注释){
如果(对象名的anno instanceof){
ObjectName annObjName=(ObjectName)anno;
Target Target=anno.getAnnotation(Target.class);
if(target.getType().equals)(ElementType.TYPE)
doThat(annObjName.name());
else if(target.getType().equals(ElementType.FIELD)
doThis(annObjName.field());
}
}
}
您所能做的就是查看调用
getAnnotations()
,因为您似乎错误地认为clazz.getAnnotations()
将返回类中所有内容的所有注释。这是错误的。当您调用clazz.getAnnotations()时
,您只能直接在类上获取批注。若要获取字段批注,必须调用clazz.getFields()
,然后调用getAnnotations()
在字段
元素上。因此,只要保持这些元素正确,就不会有混淆的风险。好的,thx。然后只有一个选项可以获取所有类注释和字段注释,并比较其ObjectName实例是否正确