我使用下面的代码来获取Java Class注释:
JavaClass jclas = new ClassParser("src\\test\\org\\poc\\TestClass.class").parse();
ClassGen cg = new ClassGen(jclas);
AnnotationEntryGen[] attributes = cg.getAnnotationEntries();
for (AnnotationEntryGen attribute : attributes) {
System.out.println("attribute: " + attribute);
if(attribute.getTypeName().contains("Fix")) {
// Do something
}
}但是当我打印attribute.getTypeName()时,我得到的是Lorg/annotations/Fix。注解的名字是@Fix(..),你知道我怎么才能只得到名字吗?
发布于 2020-04-21 23:32:02
像`"Lorg/annotations/Fix“这样的字符串是一个字段描述符。Java为类名提供了many different formats。
您可以使用reflection-util package的Signatures class在名称的不同格式之间进行转换。
注释名称为
@Fix(..)。
这个术语是不正确的;您已经展示了完整的注释是如何用Java源代码编写的,但这不是它的名字。getTypeName()确实返回了它的名称(以字段描述符格式)。
如果需要批注的元素(当批注是用Java源代码编写时,这些元素会出现在括号之间),可以使用getValues()。您可能还会发现toString()很有用。
https://stackoverflow.com/questions/61342103
复制相似问题