Java元注解是Java注解的重要特性,下面我就来详解常见的4大Java元注解@mikechen
Java元注解定义
Java元注解是java API提供的,是用于修饰注解的注解。
Java元注解作用
通过使用Java元注解,可以为注解指定:作用范围、生命周期、是否可重复和是否继承等信息,从而提高注解的灵活性和可扩展性。
Java元注解分类
Java元注解是包括:@Retention、@Target、@Documented、@Inherited等。
如下图所示:
这些元注解包括:
- @Retention:用来指定注解的保留期限,可以设置为SOURCE、CLASS或RUNTIME。
- @Target:用来指定注解可以应用于哪些程序元素,包括类、方法、变量、参数等。默认情况下,注解可以应用于所有程序元素。
- @Documented:用来指定注解是否出现在Java文档中。
- @Inherited:用来指定子类是否继承父类的注解。
下面我就分别来详解4大Java元注解@mikechen
1.@Target
@Target用于指定注解的作用范围,它的取值包括:
- ElementType.TYPE:用于注解类、接口、枚举和注解类型。
- ElementType.FIELD:用于注解字段、枚举常量。
- ElementType.METHOD:用于注解方法。
- ElementType.PARAMETER:用于注解方法参数。
- ElementType.CONSTRUCTOR:用于注解构造器。
- ElementType.LOCAL_VARIABLE:用于注解局部变量。
- ElementType.ANNOTATION_TYPE:用于注解其他注解类型。
- ElementType.PACKAGE:用于注解包。
@Target示例:
import java.lang.annotation.ElementType; import java.lang.annotation.Target; @Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD}) public @interface MyAnnotation { // ... }
这个示例中,@Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD})指定了MyAnnotation注解可以用于类、字段和方法。
2.@Retention
@Retention用于指定注解的生命周期,它的取值包括:
- RetentionPolicy.SOURCE:注解只保留在源代码中,编译时被忽略。
- RetentionPolicy.CLASS:注解被编译到字节码中,但运行时被忽略(默认值)。
- RetentionPolicy.RUNTIME:注解在运行时也保留,并可以被反射机制读取。
@Retention示例:
import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @Retention(RetentionPolicy.RUNTIME) public @interface MyAnnotation { // ... }
这个示例中,@Retention指定了MyAnnotation注解的保留策略为RUNTIME,即可以在运行时获取到该注解的信息。
3.@Documented
@Documented指定注解是否包含在JavaDoc中,默认情况下注解不会被包含在JavaDoc中。
如果想让注解被包含在JavaDoc中,就需要使用@Documented注解。
@Documented示例:
import java.lang.annotation.Documented; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @Documented @Retention(RetentionPolicy.RUNTIME) public @interface MyAnnotation { // ... }
这个示例中,@Documented注解指定了MyAnnotation注解可以被包含在JavaDoc中。
4.@Inherited
@Inherited用于指定注解是否可以被子类继承。
@Inherited示例:
import java.lang.annotation.Inherited; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @Inherited @Retention(RetentionPolicy.RUNTIME) public @interface MyAnnotation { // ... }
以上就是Java元注解详解,更多Java注解请查看:Java注解全面详解(万字图文总结)
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》