网站首页 > java教程 正文
Java元注解是Java注解的重要特性,下面我就来详解常见的4大Java元注解@mikechen
本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集》里面。
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 {
// ...
}
本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集》里面。
猜你喜欢
- 2024-09-21 Java基础:注解,改变了编程的体验
- 2024-09-21 人手必备!Java8中的注解,你必须知道的几点
- 2024-09-21 Java 进阶之 注解(java中注解如何实现的)
- 2024-09-21 java注解的使用(java注解的实现原理)
- 2024-09-21 不吹牛,撸个注解有什么难的(不吹牛的道理)
- 2024-09-21 终于弄懂了Spring@Component @Repository@Service的区别
- 2024-09-21 2020年最新Java全套教程注解(2020年最新兵役法)
- 2024-09-21 你知道Spring是如何处理注解的吗?
- 2024-09-21 注解梳理:深入理解Java注解类型(@Annotation)
- 2024-09-21 Java中的注解到底是如何工作的?(注解 java)
你 发表评论:
欢迎- 最近发表
-
- class版本不兼容错误原因分析(class更新)
- 甲骨文Oracle公司为Java的最新LTS版本做出改进
- 「版本发布」Minecraft Java开发版 1.19.4-pre1 发布
- java svn版本管理工具(svn软件版本管理)
- 我的世界1.8.10钻石在第几层(我的世界1.7.2钻石在哪层)
- Java开发高手必备:在电脑上轻松切换多个JDK版本
- 2022 年 Java 开发报告:Java 8 八年不到,开发者都在用什么?
- 开发java项目,选择哪个版本的JDK比较合适?
- Java版本选型终极指南:8 vs 17 vs 21特性对决!大龄程序员踩坑总结
- POI Excel导入(poi excel导入附件)
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)