JDK8新特性(六):JDK 8 可重复注解 与 类型注解

2023-10-27

前言

       自从 Java 5 中引入注解依赖,注解开始变得非常流行,并在各个框架和项目中被广泛使用。
       不过注解有一个很大的限制:在同一个地方不能多次使用同一个注解。为了解决这个问题,JDK 8 引入了可重复注解的概念,允许在同一个地方多次使用同一个注解。 在 JDK 8 之前,注解只能用在各种程序元素(定义类、定义接口、定义方法、定义成员变量…)上。为了解决这个问题, JDK8 引入了类型注解,类型注解可以使注解用在任何地方。

1.可重复注解

       在 Java 8 之前我们不能在同一个类同一方法上重复使用同一个注解

@PropertySource("classpath:config1.properties")
@PropertySource("classpath:config2.properties")
public class AnnotationDemo{
	//代码部分
}

       上面的代码无法在 Java 7 下通过编译,错误是: Duplicate annotation。在 JDK 8 中引入了一个注解 @Repeatable 来标识某个注解是可被重复使用的,但是需要一个容器注解。可重复注解的使用步骤如下:

1.1定义可重复的注解容器注解

@Retention(RetentionPolicy.RUNTIME)
@interface MyTests {//这是重复的容器注解
    MyTest[] value();
}

1.2定义一个可以重复的注解

@Retention(RetentionPolicy.RUNTIME)
@Repeatable(MyTests.class)
@interface MyTest{
    String value();
}

1.3配置多个重复的注解

@MyTest("mt1")
@MyTest("mt2")
@MyTest("mt3")
public class annotationDemo {

    @Test
    @MyTest("ms1")
    @MyTest("ms2")
    public void test(){

    }

    @Test
    @MyTest("mn1")
    @MyTest("mn2")
    public void test(String name){

    }
}

1.4解析配置的重复注解

@MyTest("mt1")
@MyTest("mt2")
@MyTest("mt3")
public class annotationDemo {

    @Test
    @MyTest("ms1")
    @MyTest("ms2")
    public void test(){

    }

    @Test
    @MyTest("mn1")
    @MyTest("mn2")
    public void test(String name){

    }

	//4.解析配置的重复注解
    public static void main(String[] args) throws NoSuchMethodException {
        //4.1 获取类上的注解
        //getAnnotationsByType() 是新增的API,用于用户获取重复的注解
        MyTest[] annotationsByType = annotationDemo.class.getAnnotationsByType(MyTest.class);
        for (MyTest myTest: annotationsByType) {
            System.out.println("获取类上的注解:"+myTest.value());
        }

        //4.2 获取(无参方法)方法上的注解
        //getAnnotationsByType() 是新增的API,用于用户获取重复的注解
        MyTest[] tests = annotationDemo.class.getMethod("test", null).getAnnotationsByType(MyTest.class);
        for (MyTest myTest: tests) {
            System.out.println("获取(无参方法)方法上的注解:"+myTest.value());
        }

        //4.2 获取(有参方法)方法上的注解
        //getAnnotationsByType() 是新增的API,用于用户获取重复的注解
        MyTest[] tests1 = annotationDemo.class.getMethod("test", String.class).getAnnotationsByType(MyTest.class);
        for (MyTest myTest: tests1) {
            System.out.println("获取(有参方法)方法上的注解:"+myTest.value());
        }
    }
}

解析结果:

获取类上的注解:mt1
获取类上的注解:mt2
获取类上的注解:mt3
获取(无参方法)方法上的注解:ms1
获取(无参方法)方法上的注解:ms2
获取(有参方法)方法上的注解:mn1
获取(有参方法)方法上的注解:mn2

2.类型注解

     JDK 8 为 @Target 元注解新增了两种类型:TYPE_PARAMETERTYPE_USE

  1. TYPE_PARAMETER:表示该注解能够写在 声明为 泛型 的语句中,类型参数声明如:<T>、<T extends 某个类>
  2. TYPE_USE:表示注解可以用在[任何用到类型]的地方使用

2.1 TYPE_PARAMETER 的使用

//1.TYPE_PARAMETER:表示注解能够放在泛型上面
@Target(ElementType.TYPE_PARAMETER)
@interface TypeParam{
    
}
//Demo
public class typeParameterDemo<@TypeParam T> {
    @Test
    public <@TypeParam T> T test(){
        return null;
    }
}

2.2 TYPE_USER 的使用

//表示注解可以用在[任何用到类型]的地方使用
@Target(ElementType.TYPE_USE)
@interface NotNull{

}
//Demo
public class typeUseDemo {

    private @NotNull int num = 10;

    @Test
    public void test(@NotNull String name,@NotNull int age){
        @NotNull long l = 1000l;
    }
}

附:JDK8新特性(目录)

    本目录为 JDK8新特性 学习目录,包含JDK8 新增全部特性的介绍。

    如需了解,请跳转链接查看:我是跳转链接


博主写作不易,来个关注呗

求关注、求点赞,加个关注不迷路 ヾ(◍°∇°◍)ノ゙

博主不能保证写的所有知识点都正确,但是能保证纯手敲,错误也请指出,望轻喷 Thanks♪(・ω・)ノ

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JDK8新特性(六):JDK 8 可重复注解 与 类型注解 的相关文章

随机推荐

  • HTTP中application/x-www-form-urlencoded字符说明

    一 概述 在学习ajax的时候 如果用post请求 需要设置如下代码 ajax setRequestHeader content type application x www form urlencoded 虽然知道需要这么做 但是不知道a
  • postman pre-request scripts 导入js文件_Postman 高级用法指南

    Postman是一款强大的API接口测试工具 有许多不容易发现的好用的功能 下面简单介绍其中一部分功能 详细内容可以参考文档 官方还有视频教程 非常方便入手 后续本博客会持续提供一些Postman使用的细节技巧 方便大家用Postman进行
  • strstr函数底层逻辑实现

    一 函数介绍 char strstr const char haystack const char needle 功能 在字符串haystack中查找字符串needle出现的位置 参数 haystack 源字符串首地址 needle 匹配字
  • C++读写txt文件(基本操作1)

    本博客主要写了用C 读写txt本文的基本操作 最简单的写入和读出两个基本操作 本程序的功能是向Test txt文件文件写入字符串 This is a Test12 和读取字符串 This is a Test12 并且将读取到的字符串存到te
  • python组件

    1 生成6位数字随机验证码 import random import string def num code length 6 生成长度为length的数字随机验证码 param length 验证码长度 return 验证码 return
  • STM32—ADC和DMA的应用之电流检测(第二部分:电流检测电路与数据处理)

    文章目录 前言 一 电流检测原理 1 霍尔效应 2 CC6902电流传感器 二 电流检测电路 三 数据处理 前言 前一部分介绍了如何配置ADC和DMA 这一部分介绍在硬件部分如何实现电流检测以及检测到电流后的数据处理 一 电流检测原理 1
  • QT-CSV文件读写

    QT CSV文件读写 前言 一 CSV文件初始化 二 CSV写入 三 CSV读取 四 程序链接 前言 csv文件之所以被用户推荐使用 我觉得即可以用excel打开 同时也是可以用文本编辑器打开 而且文本内容的显示也是比较有规律 用户查看起来
  • 2013中国数据库技术大会

    http www cn21 com cn meet 2013sjk yjjb html
  • Web 应用程序——我的心理备忘单

    介绍 本文是 持续交付 HTML 到 Kubernetes 的一部分 虽然我迫不及待地想深入了解分布式系统的细节 但我发现自己处于一个不愉快的境地 我认为最好从前端开始写 那是因为网络应用程序是当今的标准 在多个云中部署的 ArgoCD K
  • 图像增广:强化深度学习的视觉表现力

    目录 摘要 1 图像增广简介 2 图像增广的原理 3 常见的图像增广技术 4 如何在实际项目中应用图像增广 5 实际应用 摘要 当今 深度学习已经在计算机视觉领域取得了令人瞩目的成就 图像增广作为一种数据处理技术 让我们在使用有限的图像数据
  • Lipschitz常数、Lipschitz条件

    参考 https www zybang com question dd732fbc5a0224c6526bcdfba613b53c html https baike baidu com item lipschitz E6 9D A1 E4
  • OPENCV中的批改答题卡

    Fu Xianjun All Rights Reserved 文章目录 前言 一 为什么使用OPENCV 二 使用步骤 1 引入库 2 写入基本函数 这样打包好就可以套用了 多少方便不知道 3 导入图片利用上面的函数来进行处理 没错就是这么
  • 解决Jmeter压测异常率过高的问题

    今天在使用本地 Windows Jmeter对远程服务器进行压力测试的时候 发现异常率非常的高 但是项目中日志没有报错误 然后观察TCP链接数排除了服务端的嫌疑 发现随着压测的进行 TCP连接数越来越少 打开日志输出发现报了大量的以下错误
  • leetcode5.最长回文子串

    最长回文子串 给你一个字符串 s 找到 s 中最长的回文子串 如果字符串的反序与原始字符串相同 则该字符串称为回文字符串 示例 1 输入 s babad 输出 bab 解释 aba 同样是符合题意的答案 示例 2 输入 s cbbd 输出
  • 注释整段代码

    选中需要注释的整段代码 Ctrl 同时 即可 取消注释在选中按一遍Ctrl
  • 在 MCU 上运行高级 C++ 软件

    使用 C 开发用户应用程序有很多优势 因此该语言在包括基于 MCU 的系统中变得越来越流行也就不足为奇了 mbed 项目完全专注于这种语言 许多 RTOS 提供 C 兼容层 但与 大 系统 具有 MMU 相比 大多数 RTOS 都有一些限制
  • TensorFlow2.0:张量的数学运算

    1 2 pow square 3 sqrt 4 5 exp log 6 matmul 7 linear layer element wise matrix wise matmul dim wise reduce mean max min s
  • 深度学习框架-TensorFlow

    1 1 TensorFlow介绍 深度学习框架TensorFlow一经发布 就受到了广泛的关注 并在计算机视觉 音频处理 推荐系统和自然语言处理等场景下都被大面积推广使用 现在已发布2 3 0版本 接下来我们深入浅出的介绍Tensorflo
  • R语言:修改chart.Correlation()函数绘制相关性图——完美出图

    最近 需要对一组数据进行相关性分析 之前用R语言画过热图 但感觉还是不够直观 作为一个小白 干什么都不太成体系 所以就直接搜 搜现成的 于是 找到了这个 相关性分析 R语言 相关性矩阵及可视化 相关性分析 R语言 相关性矩阵及可视化 简书
  • JDK8新特性(六):JDK 8 可重复注解 与 类型注解

    前言 自从 Java 5 中引入注解依赖 注解开始变得非常流行 并在各个框架和项目中被广泛使用 不过注解有一个很大的限制 在同一个地方不能多次使用同一个注解 为了解决这个问题 JDK 8 引入了可重复注解的概念 允许在同一个地方多次使用同一