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

深入Java注解:从内置到元注解与自定义实战指南


文章目录

  • 📌《深入Java注解:从内置到元注解与自定义实战指南》
    • 前言
    • 一、内置注解详解
      • 1. `@Override`
      • 2. `@Deprecated`
      • 3. `@SuppressWarnings`
    • 二、元注解剖析
      • 1. `@Target`
      • 2. `@Retention`
      • 3. `@Documented`
      • 4. `@Inherited`
      • 元注解实战示例
    • 三、自定义注解实战
      • 1. 注解定义语法
      • 2. 参数声明规则
      • 3. 自定义注解示例
    • 总结


📌《深入Java注解:从内置到元注解与自定义实战指南》

前言

在Java开发中,注解(Annotation) 作为元数据的重要载体,为代码提供了丰富的附加信息。本文将系统解析Java注解体系,涵盖内置注解元注解自定义注解三大核心内容,助你全面掌握注解的应用技巧。


一、内置注解详解

Java内置了多种实用注解,主要位于java.lang包中:

1. @Override

  • 定位java.lang.Override
  • 用途:标记方法重写
  • 作用:显式声明方法旨在重写父类中的同名方法
  • 示例
    @Override
    public String toString() { return "Overridden method";
    }
    

2. @Deprecated

  • 定位java.lang.Deprecated
  • 用途:标记过时元素
  • 作用范围:方法、属性、类
  • 含义:标识元素已不推荐使用(存在安全风险或有更优替代方案)
  • 编译器警告:使用被标记元素时触发警告

3. @SuppressWarnings

  • 定位java.lang.SuppressWarnings
  • 用途:抑制编译器警告
  • 参数要求:必须指定警告类型参数
  • 常用参数
    @SuppressWarnings("all")                  // 抑制所有警告
    @SuppressWarnings("unchecked")            // 抑制未检查转换警告
    @SuppressWarnings({"unchecked", "deprecation"}) // 同时抑制多类警告
    

二、元注解剖析

元注解负责注解其他注解,定义在java.lang.annotation包中:

1. @Target

  • 作用:定义注解适用范围
  • 参数类型ElementType枚举
  • 常用值
    @Target(ElementType.METHOD)   // 仅用于方法
    @Target({ElementType.TYPE, ElementType.METHOD}) // 多作用域
    

2. @Retention

  • 作用:声明注解生命周期
  • 保留策略
    策略级别说明
    SOURCE源码级仅存在于源码,编译后丢弃
    CLASS字节码级保留到字节码文件(默认)
    RUNTIME运行时运行时可通过反射获取

3. @Documented

  • 作用:标记注解应包含在Javadoc中

4. @Inherited

  • 作用:允许子类继承父类的注解

元注解实战示例

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@interface MyAnnotation {// 注解定义体
}// 使用示例
@MyAnnotation
public class TestClass {@MyAnnotationpublic void annotatedMethod() { /* ... */ }
}

三、自定义注解实战

通过@interface声明自定义注解,自动继承java.lang.annotation.Annotation接口

1. 注解定义语法

public @interface AnnotationName {// 参数声明(方法形式)ParamType paramName() default defaultValue;
}

2. 参数声明规则

规则说明
参数即方法方法名即参数名
返回类型限制仅支持基本类型、String、Class、枚举、注解或数组
默认值通过default设置
单参数特殊命名建议参数名为value
空值处理常用空字符串或0作为默认值

3. 自定义注解示例

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@interface CustomConfig {// 带默认值的字符串参数String name() default "defaultName";// 必填整型参数int priority();// 单参数特殊命名String value();
}// 使用示例
public class Service {@CustomConfig(name = "orderService", priority = 1, value = "high")public void processOrder() { /* ... */ }
}

总结

Java注解体系提供了强大的元编程能力,通过本文我们掌握了:

  1. 三种内置注解的适用场景
  2. 四种元注解的核心作用
  3. 自定义注解的创建与使用技巧

点赞❤️ ➡️ 关注⭐️ ➡️ 收藏📌 您的支持是我持续创作的动力!

坚持的力量

http://www.lryc.cn/news/592649.html

相关文章:

  • STM32-CAN
  • 开发避坑短篇(2):uni-app微信小程序开发‘createIndependentPlugin‘模块缺失问题分析与解决方案
  • 初探:C语言FILE结构之文件描述符与缓冲区的实现原理
  • iOS OC 图片压缩
  • CityEngine自动化建模
  • Java面试宝典:Maven
  • 片上网络(NoC)拓扑结构比较
  • 现代R语言机器学习:Tidymodel/Tidyverse语法+回归/树模型/集成学习/SVM/深度学习/降维/聚类分类与科研绘图可视化
  • PHP:经典与现代交融的Web开发利器
  • 生成式引擎优化(GEO)核心解析:下一代搜索技术的演进与落地策略
  • 超简单linux上部署Apache
  • UDP协议介绍
  • 深入理解Linux文件操作:stdin/stdout/stderr与C语言文件函数全解析
  • IDEA 2020.1版本起下载JDK
  • 基于 Docker 及 Kubernetes 部署 vLLM:开启机器学习模型服务的新篇章
  • Docker --privileged 命令详解
  • Jenkins+Docker+Git实现自动化CI/CD
  • [2025CVPR-目标检测方向]FSHNet:一种用于3D物体检测的全稀疏混合网络。
  • vue2 面试题及详细答案150道(41 - 60)
  • Linux系统安装Docker及部署Node.js 20.15.0(含pnpm、pm2)完整指南
  • 武汉江滩某码头变形及应力自动化监测
  • 由于热爱,我选PGCE专家学习
  • 小红书采集工具:无水印图片一键获取,同步采集笔记与评论
  • 接口测试时如何上传文件(图片、安装包等)
  • MyBatis缓存实战指南:一级与二级缓存的深度解析与性能优化
  • Tomcat及Nginx部署使用
  • 淘宝高级详情接口接入指南与Python代码实战
  • 如何搭建systemverilog/UVM验证环境开发vip(腾讯元宝)
  • C专题5:函数进阶和递归
  • InnoDB 多版本控制 慢sql排查(基于MySQL 5.7)