1.1 目标
1.2 重复注解的使用
自从Java 5中引入 注解 以来,注解开始变得非常流行,并在各个框架和项目中被广泛使用。不过注解有一个很大的限
制是:在同一个地方不能多次使用同一个注解。JDK 8引入了重复注解的概念,允许在同一个地方多次使用同一个注
解。在JDK 8中使用@Repeatable注解定义重复注解。
重复注解的使用步骤:
1. 定义重复的注解容器注解

2. 定义一个可以重复的注解

3. 配置多个重复的注解

4. 解析得到指定注解


package com.itheima.demo08annotation;import org.junit.Test;import java.lang.annotation.Repeatable;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;// 3.配置重复注解@MyTest("ta")@MyTest("tb")@MyTest("tc")public class Demo01 {@Test@MyTest("ma")@MyTest("mb")public void test() {}public static void main(String[] args) throws NoSuchMethodException {// 4.解析重复注解// 获取类上的重复注解// getAnnotationsByType是新增的API用户获取重复的注解MyTest[] annotationsByType = Demo01.class.getAnnotationsByType(MyTest.class);for (MyTest myTest : annotationsByType) {System.out.println(myTest);}System.out.println("----------");// 获取方法上的重复注解MyTest[] tests = Demo01.class.getMethod("test").getAnnotationsByType(MyTest.class);for (MyTest test : tests) {System.out.println(test);}}}// 1.定义重复的注解容器注解@Retention(RetentionPolicy.RUNTIME)@interface MyTests { // 这是重复注解的容器MyTest[] value();}// 2.定义一个可以重复的注解@Retention(RetentionPolicy.RUNTIME)@Repeatable(MyTests.class)@interface MyTest {String value();}
1.3 类型注解的使用
JDK 8为@Target元注解新增了两种类型: TYPE_PARAMETER , TYPE_USE 。
TYPE_PARAMETER :表示该注解能写在类型参数的声明语句中。 类型参数声明如: 、 TYPE_USE :表示注解可以再任何用到类型的地方使用。
TYPE_PARAMETER的使用


TYPE_USE的使用

package com.itheima.demo08annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Target;
import java.util.ArrayList;
public class Demo02 <@TypeParam T> {
private @NotNull int a = 10;
public void test(@NotNull String str, @NotNull int a) {
@NotNull double d = 10.1;
}
public <@TypeParam E extends Integer> void test01() {
}
}
@Target(ElementType.TYPE_USE)
@interface NotNull {
}
@Target(ElementType.TYPE_PARAMETER)
@interface TypeParam {
}
1.4 小结
通过@Repeatable元注解可以定义可重复注解, TYPE_PARAMETER 可以让注解放在泛型上, TYPE_USE 可以让注解放
在类型的前面
