H__D  

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

  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 }

 

posted on 2021-06-22 19:34  H__D  阅读(336)  评论(0编辑  收藏  举报