Java中的@Repeatable注解的作用详解

 更新时间:2024年01月31日 10:35:18   作者:搏·梦  
这篇文章主要介绍了Java中的@Repeatable注解的作用详解,@Repeatable注解是用来标注一个注解在同一个地方可重复使用的一个注解,使被他注释的注解可以在同一个地方重复使用,需要的朋友可以参考下

1. 前言

最近无意看到某些注解上有@Repeatable,出于比较好奇,因此稍微研究并写下此文章。

@Repeatable注解是用来标注一个注解在同一个地方可重复使用的一个注解,比如说你定义了一个注解,如果你的注解没有标记@Repeatable这个JDK自带的注解,那么你这个注解在引用的地方就只能使用一次。

2. 先说结论

@Repeatable的作用:使被他注释的注解可以在同一个地方重复使用。

具体使用如下:

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Repeatable(value = MyAnnotationList.class)
public @interface MyAnnotation {
    String name();
}
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotationList {
	// 被 @Repeatable引用的注解中,必须得有被 @Repeatable注释的注解(@MyAnnotation)返回类型的value方法
    MyAnnotation[] value();
}
public class MyAnnotationTest {
	@MyAnnotation(name = "Test1")
	@MyAnnotation(name = "Test2")
	private void testMethod() {
    }
	@MyAnnotationList(value = {@MyAnnotation(name = "Test1"), @MyAnnotation(name = "Test2")})
	private void testMethod2() {
	}
}

3. 案例演示

先定义新注解

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
    String name();
}

创建新类并使用自定义注解

public class MyAnnotationTest {

    @MyAnnotation(name = "Test1")
    private void testMethod(){

    }
}

当注解@MyAnnotation还没被@Repeatable注释的时候,在testMethod()方法上使用多次,会出现下面报错:

在这里插入图片描述

将会提示:@MyAnnotation没被@Repeatable注解,无法重复使用@MyAnnotation

因此在@MyAnnotation上使用@MyAnnotation,如下:

在这里插入图片描述

4. 注意事项

@Repeatable(value = MyAnnotationList.class) 中引用了 @MyAnnotationList注解,用于@MyAnnotation注解上,有如下几个细节:

细节一:在引用注解上的@MyAnnotationList的方法中得有value()方法,如下:

在这里插入图片描述

细节二:在引用注解上的@MyAnnotationList的方法中得有【被@Repeatable注解的@MyAnnotation注解类型的数组返回值的value方法】

在这里插入图片描述

细节三:该案例中,若在方法上重复使用@MyAnnotation注解,实际上也会在运行的时候被包装成MyAnnotationList[] 里面,如下:

在这里插入图片描述

细节四:@MyAnnotation可多次使用,但不可多次与@MyAnnotationList一起使用,如下:

在这里插入图片描述

细节五:@MyAnnotation可多次使用,但仅可一个与@MyAnnotationList一起使用,但唯一的@MyAnnotation在运行的时候被包装成MyAnnotationList[] 里面,如下:

在这里插入图片描述

到此这篇关于Java中的@Repeatable注解的作用详解的文章就介绍到这了,更多相关@Repeatable注解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java文件操作工具类fileUtil实例【文件增删改,复制等】

    Java文件操作工具类fileUtil实例【文件增删改,复制等】

    这篇文章主要介绍了Java文件操作工具类fileUtil,结合实例形式分析了java针对文件进行读取、增加、删除、修改、复制等操作的相关实现技巧,需要的朋友可以参考下
    2017-10-10
  • Java 多线程实例详解(二)

    Java 多线程实例详解(二)

    本文主要介绍Java 多线程的资料整理,这里整理了详细资料及相关示例代码,有兴趣的小伙伴可以参考下
    2016-09-09
  • JAVA线程池监控以及动态调整示例详解

    JAVA线程池监控以及动态调整示例详解

    这篇文章主要为大家介绍了JAVA线程池监控以及动态调整示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • 详解SpringBoot中META-INF的作用与功能

    详解SpringBoot中META-INF的作用与功能

    SpringBoot开发的应用程序中,META-INF目录扮演着非常重要的角色,本文就来介绍一下 META-INF的作用及用处,具有一定的参考价值,感兴趣的可以了解一下
    2025-07-07
  • Java构造器使用方法及注意事项

    Java构造器使用方法及注意事项

    这篇文章主要介绍了Java构造器使用方法及注意事项的相关资料,这里举例说明如何使用构造器及需要注意的地方,需要的朋友可以参考下
    2017-07-07
  • SpringBoot中动态注入Bean的技巧分享

    SpringBoot中动态注入Bean的技巧分享

    在 Spring Boot 开发中,动态注入 Bean 是一种强大的技术,它允许我们根据特定条件或运行时环境灵活地创建和管理 Bean,本文将介绍 Spring Boot 中三种动态 Bean 注入技巧,需要的可以参考一下
    2025-06-06
  • SpringMVC实现文件上传与下载、拦截器、异常处理器等功能

    SpringMVC实现文件上传与下载、拦截器、异常处理器等功能

    这篇文章主要给大家介绍了关于SpringMVC实现文件上传与下载、拦截器、异常处理器等功能的相关资料,这些功能在我们日常开发中经常会遇到,本文通过示例代码介绍的非常详细,需要的朋友可以参考下
    2021-09-09
  • Springboot循环依赖的原因及解决

    Springboot循环依赖的原因及解决

    本文主要介绍了Spring Boot中的循环依赖问题,包括循环依赖的定义、产生原因以及解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-05-05
  • SpringBoot处理请求参数中包含特殊符号

    SpringBoot处理请求参数中包含特殊符号

    今天写代码遇到了一个问题,请求参数是个路径“D:/ExcelFile”,本文就详细的介绍一下该错误的解决方法,感兴趣的可以了解一下
    2021-06-06
  • 如何利用Java在图片上添加文字水印效果

    如何利用Java在图片上添加文字水印效果

    最近发现经常被别的网站盗用,而且不注明出处,因此不得不加上水印,这篇文章主要给大家介绍了关于如何利用Java在图片上添加文字水印效果的相关资料,需要的朋友可以参考下
    2022-01-01

最新评论