zoukankan      html  css  js  c++  java
  • 【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 }
  • 相关阅读:
    转:我们是否应该把后端构建为API
    转:浅谈命令查询职责分离(CQRS)模式
    转:如何在Linux上提高文本的搜索效率
    结对编程???该歇歇了
    码农语录•「程序代码的可信度,不会比写的人还可信。」
    七个错误可能引发网页布局灾难
    为什么我不再和别人比较了?
    顶级程序员的10条最佳实践
    程序员淡定的姿态和操蛋的心...
    【好文翻译】码农们:效率与质量,你选择哪个?
  • 原文地址:https://www.cnblogs.com/h--d/p/14920004.html
Copyright © 2011-2022 走看看