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 }
  • 相关阅读:
    Java SE 第十一讲(面向对象之封装)续二
    Java SE 第二十六讲 包与导入语句剖析
    Java SE 第三十一,二,三 Java数组剖析,Java数组内存地址解析
    Java SE 第三十四,五,六讲 Array类解析及数组疑难剖析,冒泡排序,交换排序以及快速排序
    Java SE 第三十八,九,四十,四十一,四十二,三四IDE详细介绍,ArrayList源代码深入剖析,L
    java高效的获取指定的精度的double数
    C++ 字符常量
    C++ endl
    C++基本数据类型
    vs2005的treeview简单使用之无限级别菜单建立
  • 原文地址:https://www.cnblogs.com/h--d/p/14920004.html
Copyright © 2011-2022 走看看