博文鸡汤: 《刻意练习》中有这样一句话,如果你愿意投入时间,一切皆有可能。
相信我们大多数猿猿都用过jdk1.8中的重复注解,下面我们先看一下基础使用
1. 定义注解
@Retention(RetentionPolicy.RUNTIME)
@Repeatable(Annos.class)
public @interface Anno {
String value();
}
2. 定义注解容器
@Retention(RetentionPolicy.RUNTIME)
public @interface Annos {
Anno[] value();
}
3. 使用注解
@Anno(value = "one")
@Anno(value = "two")
@Anno(value = "three")
@Anno(value = "four")
@Anno(value = "five")
public class AnnoTest { // 此时类上已经有五个注解
}
关键性的代码在于 @Repeatable(Annos.class)
4. 下面写一个方法,来解析注解的声明
private static void getAnno(Class<?> aClass) {
System.out.println("当前类上注解个数:"+aClass.getAnnotations().length);
// System.out.println(aClass.getAnnotation(Anno.class).value()); 此处空指针
System.out.println(aClass.getAnnotation(Annos.class).value());
System.out.println("注解属性的长度:"+aClass.getAnnotation(Annos.class).value().length);
System.out.println(aClass.getAnnotation(Annos.class).annotationType());
}
// 给予调用
public static void main(String[] args) {
System.out.println(getAnno(new AnnoTest().getClass()));
}
控制台结果如下:
可以看到获取到的是注解容器,当我们使用多注解时,实际上
是用了封装的注解容器,在其他一些框架中你可能还看到
另外一种使用形式
@Annos({@Anno(value = "2021"),
@Anno(value = "一起成为暴富兄弟")})
private static String getString(String code) {
return code.intern();
}
总结: , 。