按你这么说,贴了@Retention(RetentionPolicy.RUNTIME)的自定义注解, 我一样可以通过反射访问注解并执行相应的操作,那这两个注解不是一样的吗
时间: 2024-04-21 20:24:51 浏览: 99
注解+反射实现自定义验证工具,可实现业务校验,字段多种校验
非常抱歉,我之前的回答可能有误导性。实际上,`@Retention(RetentionPolicy.RUNTIME)` 和 `@Retention(RetentionPolicy.CLASS)` 注解之间是有区别的。
当我们将一个自定义注解标记为 `@Retention(RetentionPolicy.RUNTIME)` 时,它的保留策略是在运行时可见的。这意味着我们可以在运行时通过反射来访问注解,并执行相应的操作,如获取注解的值,根据注解的信息做一些定制的逻辑等。
而当我们将一个自定义注解标记为 `@Retention(RetentionPolicy.CLASS)` 时,它的保留策略是在编译后的字节码中保留的。这意味着注解在运行时不可见,我们无法直接通过反射来访问和处理这个注解。只有在编译后的字节码中,我们才能通过反射等机制来访问和处理这个注解。
简而言之,`@Retention(RetentionPolicy.RUNTIME)` 注解可以在运行时通过反射来访问和处理,而 `@Retention(RetentionPolicy.CLASS)` 注解只能在编译后的字节码中通过反射来访问和处理。这两个注解的区别在于注解的可见性和访问方式。对于需要在运行时动态访问注解的情况,我们应该选择 `@Retention(RetentionPolicy.RUNTIME)` 注解。
阅读全文