java - RuntimeVisibleAnnotations 和 RuntimeInvisibleAnnotations - 如何从代码访问?

标签 java attributes annotations jvm

Section 4.7.16 of the JVM specification包括“RuntimeVisibleAnnotations”的描述。我想知道什么会导致属性包含在此属性表中,这是否只能通过对属性应用 @Retention(RetentionPolicy.RUNTIME) 来实现?相反,对于“RuntimeInvisibleAnnotations”(请参阅​​ 4.7.17 中的进一步内容),此 @Retention(RetentionPolicy.CLASS) 只是还是 @Retention(RetentionPolicy.SOURCE)

最佳答案

从 JVM 和 JLS 编译信息规范为我们提供了以下图片:

  1. 使用值为 RetentionPolicy.SOURCE@Retention 进行元注释的注释不得出现在它们所在的类或接口(interface)的二进制表示中出现,即它们根本不会记录在类文件中。

  2. 带有 RetentionPolicy.CLASS 的注释必须以它们出现的类或接口(interface)的二进制表示形式表示,除非它们注释局部变量声明。局部变量声明上的注释永远不会保留在二进制表示中。

    这就是 RuntimeInvisibleAnnotations 属性的设计目的。

    它们不需要在运行时由 VM 保留,除非已指示 Java 虚拟机通过一些特定于实现的机制(例如命令行标志)保留这些注释。

  3. 带有 RetentionPolicy.RUNTIME 的注释将由编译器记录在类文件中,并且必须在运行时通过反射库可用。这是针对 RuntimeVisibleAnnotations 属性。

关于java - RuntimeVisibleAnnotations 和 RuntimeInvisibleAnnotations - 如何从代码访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22936139/

相关文章:

php - 使用 XPATH(和 PHP)从样式属性中选择背景 url

java - Hibernate注解

java - 使用注释处理器创建具有特定注释的类列表

java - 从坐标列表中找到最小距离处的坐标

java - 如何确定用于将大量文件复制到外部共享文件夹的并行 Java 线程的理想数量?

Java - 从ArrayList中分离并显示元素,如带有子列表的列表

asp.net-mvc - 如何创建特定于区域、 Controller 和操作的自定义 AuthorizeAttribute?

java - 有没有办法在groovy中自动设置字符串中的Windows路径?

asp.net-mvc - ASP.NET MVC 3 : Inverse Authorize Attribute

Java注解——代码简化