当前位置: 首页 > news >正文

JAVA核心知识点--元注解详解

608564A16E7D652E882914E830EE4050(1)

📚博客主页:代码探秘者

✨专栏:《JavaSe》 其他更新ing…

❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️

🙏作者水平有限,欢迎各位大佬指点,相互学习进步!


img

文章目录

    • 一、@Target:定义注解可应用的位置
      • 常用取值(来自 `java.lang.annotation.ElementType` 枚举):
      • 示例:
    • 二、@Retention:定义注解的生命周期(保留策略)
      • 可选值(来自 `java.lang.annotation.RetentionPolicy` 枚举):
      • 示例:
    • 三、@Documented:是否包含在 Javadoc 中
      • 说明:
      • 示例:
    • 四、@Inherited:注解是否可以被子类继承
      • 说明:
      • 示例:
    • 五、组合使用的例子
    • 小结

元注解(Meta-Annotation)用于定义注解行为,它们本身是注解,用来修饰“注解类”。下面我详细介绍一下常见元注解以及它们可以填写的值(即 参数或枚举类型的取值):


一、@Target:定义注解可应用的位置

常用取值(来自 java.lang.annotation.ElementType 枚举):

含义
TYPE类、接口、枚举、注解类
FIELD字段(成员变量)
METHOD方法
PARAMETER方法参数
CONSTRUCTOR构造方法
LOCAL_VARIABLE局部变量
ANNOTATION_TYPE注解类型(用于元注解)
PACKAGE
TYPE_PARAMETER (Java 8+)类型参数(泛型中的 T、E 等)
TYPE_USE (Java 8+)所有使用类型的地方,如泛型、强转、变量声明等

示例:

@Target({ElementType.METHOD, ElementType.TYPE})
public @interface MyAnnotation {}

二、@Retention:定义注解的生命周期(保留策略)

可选值(来自 java.lang.annotation.RetentionPolicy 枚举):

含义
SOURCE仅在源码中保留,编译后丢弃(如 @Override)
CLASS编译期保留在 class 文件中,运行时不可读取(默认)
RUNTIME运行时可通过反射读取(框架中最常用)

示例:

@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {}

三、@Documented:是否包含在 Javadoc 中

说明:

  • 没有参数。
  • 加上这个注解,表示该注解使用时会被包含在生成的 Javadoc 中。

示例:

@Documented
public @interface MyAnnotation {}

四、@Inherited:注解是否可以被子类继承

说明:

  • 没有参数。
  • 仅适用于类(@Target(ElementType.TYPE));
  • 如果某个类用注解 A 标注了,子类也会“继承”这个注解(通过 getAnnotation() 可获取)。

示例:

@Inherited
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {}

五、组合使用的例子

@Documented
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyLog {String value() default "";
}

小结

元注解参数类型或可选值
@TargetElementType 枚举:TYPE, FIELD, METHOD, …
@RetentionRetentionPolicy 枚举:SOURCE, CLASS, RUNTIME
@Documented无参数
@Inherited无参数,仅作用于类注解

http://www.lqws.cn/news/74647.html

相关文章:

  • 网络攻防技术四:网络侦察技术
  • 制作个人Github学术主页
  • 智慧零工平台前端开发实战:从uni-app到跨平台应用
  • uniapp路由跳转toolbar页面
  • React 18新特性介绍
  • 【保姆级教程】PDF批量转图文笔记
  • springboot 集成webFilter登录认证信息过滤 DEMO原型介绍
  • TomatoSCI数据分析实战:探索社交媒体成瘾
  • CppCon 2014 学习:(Costless)Software Abstractions for Parallel Architectures
  • MCP协议学习
  • GODOT引擎学习日志
  • ShenNiusModularity项目源码学习(33:ShenNius.Admin.Mvc项目分析-18)
  • CppCon 2014 学习:Hardening Your Code
  • 地震资料裂缝定量识别——学习计划
  • 开发的几种格式,TCP的十个重要机制
  • Warp安装后启动报错
  • 趋势因子均值策略思路
  • 使用 OpenCV (C/C++) 通过二值化增强车牌识别
  • JAVA中的注解和泛型
  • 论文写作核心要点
  • 【安全】VulnHub靶场 - W1R3S
  • Kotlin 中的 companion object 使用指南
  • 数据库系统概论(十五)详细讲解数据库视图
  • NX847NX855美光固态闪存NX862NX865
  • Git-flow流
  • 【iOS】ARC 与 Autorelease
  • 机器学习:支持向量机(SVM)原理解析及垃圾邮件过滤实战
  • Docker 安装 Redis 容器
  • 【仿muduo库实现并发服务器】使用正则表达式提取HTTP元素
  • 从 Windows 7 到 AnduinOS:安装、故障排除与远程控制指南