• 【Java】Java8新特性之重复注解与类型注解


    一、重复注解与类型注解介绍

      Java 8对注解处理提供了两点改进:可重复的注解及可用于类型的注解。

      重复注解:使用@Repeatable元注解,参数为可重复注解的容器,重复注解可以在目标上重复使用

      类型注解:java8中为ElementType新增了两个枚举值:TYPE_PARAMETER和TYPE_USE

    二、重复注解与类型注解使用

    1、重复注解

      即可以在同一方法、属性、类等类型中多次使用同一个注解。此特性相当于对JAVA8之前的重复注解在编译层面的增强,JAVA8实现此特性主要依赖于@Repeatable注解。

    JAVA8之前的写法

      定义一个重复注解:

    1 @interface MyRepAnno{
    2     String value();
    3 }
    4 @interface MyRepAnnos{
    5     MyRepAnno[] value();
    6 }

       使用此注解:

    1 @MyRepAnnos({@MyRepAnno(""),@MyRepAnno("")})
    2 class TestMyClass{}

    JAVA8中的写法

      定义一个重复注解

    1 @Repeatable(MyRepAnnos.class)
    2 @interface MyRepAnno{
    3     String value();
    4 }
    5 @interface MyRepAnnos{
    6     MyRepAnno[] value();
    7 }

      使用此注解:

    1 @MyRepAnno("")
    2 @MyRepAnno("")
    3 class TestMyClass{}

      上面例子中发现JAVA8中定义重复注解与JAVA7相比只是多了个@Repeatable,使用重复注解的地方JAVA8则比之前的写法更简单方便,可读性更强。

    2、类型注解

    TYPE_PARAMETER

      表示该注解能使用在自定义类型参数(参数的自定义类型可以是javaBean或者枚举等)的声明语句中。例子如下:

      先声明个使用TYPE_PARAMETER参数的自定义注解@MyAnno

    1 @Target({ElementType.TYPE_PARAMETER})
    2 @interface MyAnno{}

      定义一个方法使用自定义类型MyClass

    1 public String getMyClassInfo(MyClass cls){
    2     return null;
    3 }

      下面语句则是在自定义类型MyClass的声明使用了@MyAnno注解

    1 class  MyClass<@myAnno String>{}

    TYPE_USE

      表示该注解能使用在使用类型的任意语句中。

      先定义一个自定义注解:

    1 @Target({ElementType.TYPE_USE})
    2 @interface MyAnnoUse{}

      下面演示四种情形:

    • 创建实例时使用
    1 MyClass<String> aClass = new @MyAnnoUse MyClass<>();
    • 类型强转时使用
    1 Object o = "test";
    2 String str = (@MyAnnoUse String) o;
    • 方法形参中使用
    1 public String getUser(@MyAnnoUse String  name, Integer age){
    2     return null;
    3 }
    • 泛型中使用
    1 public String getClasses(List<@MyAnnoUse User> list){
    2     return null;
    3 }
  • 相关阅读:
    函数模板的局限性级解决方法(第三代具体化)
    模板实现机制
    函数模板与普通函数的区别以及调用规则
    函数模板基本用法及泛型
    向上类型转换和向下类型转换
    虚析构和纯虚析构
    纯虚函数和抽象类
    多态原理
    静态联编和动态联编即多态的概念
    虚基类的内部工作原理
  • 原文地址:https://www.cnblogs.com/h--d/p/14920004.html
Copyright © 2020-2023  润新知