当前位置: 首页 > 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.dtcms.com/a/286561.html

相关文章:

  • 变量提升知识总结
  • 前后端数据交互,关于表单数据传输问题
  • 图机器学习(11)——链接预测
  • Linux和git常用命令
  • TF-IDF(Term Frequency - Inverse Document Frequency)
  • RFID技术赋能智慧物流:实现搬运环节的精准化与高效化
  • 【PTA数据结构 | C语言版】多叉堆的上下调整
  • 【LeetCode 2163. 删除元素后和的最小差值】解析
  • 上市公司-企业超额商誉数据(2005-2023年)-实证数据
  • 《C++继承深度引擎:从内存布局到多态全景拆解》​
  • 飞算科技:以创新科技引领数字化变革,旗下飞算 JavaAI 成开发利器
  • Linux Master 知识库 —— 致 Linux 系统工程师
  • 通信算法之294:LTE系统中的整数倍频偏估计
  • 太阳辐射监测站:洞察太阳能量的科技之眼
  • 【软件系统架构】系列七:系统性能——路由器性能深入解析
  • 告别宕机!Ubuntu自动重启定时任务设置(一键脚本/手动操作)
  • [Raspberry Pi]如何將無頭虛擬顯示器服務(headless display)建置在樹莓派的Ubuntu桌面作業系統中?
  • 汽车免拆诊断案例 | 07款丰田Hilux启动故障
  • Redis——MoreKey
  • 深入理解进程地址空间:虚拟内存与进程独立性
  • nodeJs笔记(六)
  • Ubuntu系统下交叉编译Android的X265库
  • 【leetcode】3202. 找出有效子序列的最大长度(2)
  • 联合利华发起TRO维权行动,OUAI商标或引发跨境圈大批量冻结
  • 密码学基础概念详解:从古典加密到现代密码体系
  • 函数指针和指针函数
  • 【非辐射复合】半导体中非辐射载流子复合的双能级机制
  • 储能BMS通信“卡壳”?CAN转EtherCAT让电池数据“跑起来”
  • animation-timing-function动画的速度曲线
  • 面试150 被围绕的区域