美文网首页
十 重复注解与类型注解

十 重复注解与类型注解

作者: 败给小萝莉 | 来源:发表于2019-04-14 14:48 被阅读0次

    Java8对注解处理提供了两点改进:可重复的注解及可用于类型的注解

    1.可重复注解

    Java8以前定义注解:

    @Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
    @Retention(RetentionPolicy.RUNTIME)
    public @interface MyAnnotation {
        String value() default "mobei";
    }
    

    使用:


    image.png

    可以看到这时当做重复注解使用就报错了。
    如果要使用重复注解,必须先定义一个容器:

    //注解容器
    @Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
    @Retention(RetentionPolicy.RUNTIME)
    public @interface MyAnnotations {
        MyAnnotation[] value();
    }
    

    在重复注解上标注@Repeatable注解并指定容器类:

    //使用可重复注解:①必须使用@Repeatable注解标注该注解②在@Repeatable注解中指定该注解的注解容器
    @Repeatable(MyAnnotations.class)
    @Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE, TYPE_PARAMETER})//TYPE_PARAMETER:J8中新增加的类型注解
    @Retention(RetentionPolicy.RUNTIME)
    public @interface MyAnnotation {
        String value() default "mobei";
    }
    

    使用:


    image.png

    不报错,测试:

        @Test
        public void test1() throws Exception {
            Class<TestAnnotation> clazz = TestAnnotation.class;
            Method m1 = clazz.getMethod("show");
            MyAnnotation[] mas = m1.getDeclaredAnnotationsByType(MyAnnotation.class);
            for (MyAnnotation myAnnotation : mas) {
                System.out.println(myAnnotation.value());
            }
        }
    

    输出:

    Hello
    World
    
    2.类型注解

    在上面的MyAnnotation的@Target注解中加入TYPE_PARAMETER

    //使用可重复注解:①必须使用@Repeatable注解标注该注解②在@Repeatable注解中指定该注解的注解容器
    @Repeatable(MyAnnotations.class)
    @Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE, TYPE_PARAMETER})//TYPE_PARAMETER:J8中新增加的类型注解
    @Retention(RetentionPolicy.RUNTIME)
    public @interface MyAnnotation {
        String value() default "mobei";
    }
    

    可以修饰参数:

    @MyAnnotation("Hello")
    @MyAnnotation("World")
    public void show(@MyAnnotation("abc") String str){
    }
    

    相关文章

      网友评论

          本文标题:十 重复注解与类型注解

          本文链接:https://www.haomeiwen.com/subject/lpzjwqtx.html