【Java】自定义注解的使用

news/2024/11/13 16:18:29/文章来源:https://www.cnblogs.com/luyj00436/p/18544203

什么是注解

java中的,注解分为两种,元注解和自定义注解,类似于公理和定理的关系。我们常用一些注解:@Autowired@Override等都是自定义注解。

在JAVA中如何实现自定义注解?

@interface关键字

我们想定义一个自己的注解 需要使用 @interface来定义。

// 元注解
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {// 注解成员String value() default "Hello World";int number() default 42;boolean isTrue() default true;
}

注解的使用:

public class MyAnnotationTest {@MyAnnotation(value = "测试值")public void exampleMethod(){}/**** @author lyj* @date 2024-11-13*/@Testpublic void testAnnotation() {try {Method method = MyAnnotationTest.class.getMethod("exampleMethod");if(method.isAnnotationPresent(MyAnnotation.class)){MyAnnotation annotation = method.getAnnotation(MyAnnotation.class);System.out.println(annotation.value());System.out.println(annotation.number());System.out.println(annotation.isTrue());}} catch (NoSuchMethodException e) {throw new RuntimeException(e);}}
}

元注解

光加上@interface关键字还不够,我们需要了解5大元注解

元注解 说明 使用 枚举类
@Retention 指定注解的生命周期 @Retention(RetentionPolicy.SOURCE) @Retention(RetentionPolicy.SOURCE) 注解只保留在源文件,当JAVA文件编译成class文件的时候,注解会被遗弃(.java文件)
@Retention(RetentionPolicy.CLASS)注解只保留在class文件,当jvm加载class文件时,被遗弃,这是默认的生命周期
@Retention(RetentionPolicy.RUNTIME)注解不仅被保存在class文件中,jvm加载class之后,仍然存在(内存的字节码中)
@Target 指定注解可以修饰的元素类型 @Target(ElementType.FIELD) @Target(ElementType.ANNOTATION_TYPE) 标记的注解可应用于注解类型
@Target(ElementType.CONSTRUCTOR) 标记的注解可应用于构造函数
@Target(ElementType.FIELD) 标记的注解可以用英语字段或属性
@Target(ElementType.LOCAL_VARIABLE) 标记的注解可以应用于局部变量
@Target(ElementType.METHOD)标记的注解看应用于方法
@Target(ElementType.PACKAGE)标记的主机可以应用于包声明
@Target(ElementType.PARAMETER) 标记的注解可以应用于方法的参数
@Target(ElementType.TYPE)标记的注解可以应用于任何元素
@Documented 指定的注解会被JavaDoc工具提取成文档。默认情况下,JavaDoc是不包括文档的。 @Documented
@Inherited 表示该注解会被子类继承。注意,仅针对类,成员属性、方法并不收此注释的影响。 @Inherited
@Repeatable 表示可以重复利用,为了解决同一个注解不能重复在同一类/方法/属性上引用 @Repeatable

最常用的元注解还是@Retention@Target

简单的自定义注解

开始的例子,已经实现了简单的自定义注解。可以通过获取到注解的方法,获取到当前注解的值。

创建注解时,应注意:

  1. 注解必须由public修饰,默认public;
  2. 一般注解元素以名词命名,若只有一个,建议名称为value;
  3. 注解元素类型只能是基本数据类型、基本数据类型数组或注解类型(注意嵌套);
  4. default指定注解元素默认值时,值类型必须与注解元素类型相同。

使用时应注意

  1. 若无注解元素,可省略() 小括号;
  2. 若注解类型为数组,且赋值时只有一个值时,可以省略{}花括号;
  3. 如果只有一个注解元素,且注解元素名为value
  4. ElementTypePACKAGE,则此注解用于标注在package-info.java文件中。(这个文件默认是不创建的。在idea中,双击shift可搜索到,打开是才会创建。)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/833007.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java学习之定时任务框架Quartz

Quartz 的核心类有以下三部分:Job : 需要实现的任务类,实现 execute() 方法,执行后完成任务。Trigger : 包括 SimpleTrigger 和 CronTrigger。Scheduler : 任务调度器,负责基于 Trigger触发器,来执行 Job任务。 简单示例 1.pom配置 2.创建Jobpublic class EplJob imple…

比 Copilot 快两倍以上!在我的开源项目 AI Godot 桌宠中用通义灵码解决问题

Qwen 开源模型在开源榜单上大杀四方,所以不得心生几分好感,通义灵码底层基于 Qwen2.5 最新模型,代码补全和问答能力全面升级。本文作者:plzpj6bp7mjr4,内容选自通义灵码超级个体创新实践大赛,并对部分内容做了微调,感谢作者分享的最佳实践! 最近,阿里的开源大模型刷屏…

vue3开发扫雷游戏,支持调整难度,支持计时

闲来练习练习js,写了个扫雷游戏,直接拿去复制粘到自己本地某个html文件里就能运行,记得把vue加载地址改成线上的~~ 有空了可以再加上计分板 运行起来长下面这样 直接上代码1 <!DOCTYPE html>2 <html lang="en">3 <head>4 <meta charset=…

记一次potplayer播放视频错误

如图,播放存在问题解决方式,打开potplayer->选项->滤镜然后更换系统解码器即可作者:qbning出处:http://www.cnblogs.com/qbning/-------------------------------------------个性签名:曾经的我们空有一颗望海的心,却从没为前往大海做过真正的努力如果觉得这篇文章…

【大模型评测】国内外主流评测基准分析(图)

附件 1.作者:Syw 2.出处:http://www.cnblogs.com/syw20170419/ 3.本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 4.如果文中有什么错误,欢迎指出。以免更多的人被误导。

(系列十一)Vue3框架中路由守卫及请求拦截(实现前后端交互)

说明该文章是属于OverallAuth2.0系列文章,每周更新一篇该系列文章(从0到1完成系统开发)。该系统文章,我会尽量说的非常详细,做到不管新手、老手都能看懂。说明:OverallAuth2.0 是一个简单、易懂、功能强大的权限+可视化流程管理系统。 友情提醒:本篇文章是属于系列文章,…

MIGO DUMP LCX_RAP_EVENT_RUNTIME CL_RAP_EVENT_MANAGER==========CP

MIGO 收货时发生DUMP运行事务代码:SBGRFCCONF 创建入站目标输入目标BGPF 保存即可TRANSLATE with xEnglishArabic Hebrew PolishBulgarian Hindi PortugueseCatalan Hmong Daw RomanianChinese Simplified Hungarian RussianChinese Traditional Indonesian SlovakCzech Ital…

非煤矿山算法智慧矿山一体机提升机危险区域违规闯入识别边坡监测预警系统详述

在矿山行业中,安全始终是最为关键的议题。随着智能化技术的发展,智慧矿山一体机应运而生,它专为矿山安全监控和管理设计,集成了多种智能化功能,以提升矿山的安全监管能力和生产效率。这款设备不仅能够满足矿山场景下的视频智能化建设需求,还能够通过边缘计算技术实现对矿…

全国职业院校技能大赛

老师说目前这个是省赛,预计12月参加,如果要准备的话,预计要有一个月的时间准备我看了一下往年的题目,确实是平常老师跟我们讲的那种术语什么的

Hadoop搭建集群

不知道为什么会出现这样的结果

使用idea创建Sping Boot 项目 发现不能使用JAVA版本是8或者11版本只能用17版本已经更高

接下来需要一个骚操作, 官方地址: https://start.spring.io阿里云脚手架地址:https://start.aliyun.com/