ElementType.LOCAL_VARIABLE注释类型

2022-09-03 09:45:04

我想创建自己的注释来注释一些局部变量。编写注释不是问题,问题是在运行时获取它们的信息。我只能从带注释的方法或方法参数中获取一些信息,但不能从局部变量中获取。有没有办法得到它?

我自己的注释是这样的:

public void m(int a)  
@MyOwnAnnotation(some information)  
int b = 5;  
}  

或者,作为替代方案,有没有办法获取方法的代码,进一步解析它并最终获得注释值?

提前致谢。


答案 1

使用反射时,您无法检索局部变量。因此,您无法通过反射检索局部变量上的注释。我认为这种注释仅用于编译器警告。

你可以看 http://www.eclipse.org/aspectj/doc/released/adk15notebook/annotations.html

局部变量批注不会保留在类文件中(或在运行时),而不管在批注类型上设置的保留策略如何。请参阅 JLS 9.6.1.2。

如果您不想检索方法代码,可以使用JavaParser(http://javaparser.org/)。


答案 2

从 Java 8 开始,局部变量注释保留在类文件中。正如 Erick Hagstrom 所指出的,这个长期存在的 bug 已由 JSR 308 修复,JSR 308 还在 Java 语言中添加了类型注释。

但是,Java的反射API尚未更新以在方法主体中提供访问权限。您需要自己解析类文件。您可以使用 ASM 等工具。编辑我不推荐JavaParser,因为它还没有更新到Java 1.5之外。