注解

2-JDK8的重复注解和类型注解

2021-07-08 714 0

简介 重复注解和类型注解介绍

1. JDK8之前可重复注解的写法


  1. package com.ylaihui.annotation2;

  2. public @interface MyAnn {

  3.     String value() default "ylaihui";

  4. }


  1. package com.ylaihui.annotation2;

  2. public @interface MyAnnotations {

  3.     MyAnn[] value();

  4. }


  1. //MyAnnotationsTest.java

  2. package com.ylaihui.annotation2;

  3. // 注解不能重复

  4. //Duplicate annotation. The declaration of 'com.ylaihui.annotation2.MyAnn' does not have a valid

  5. //@MyAnn("yyyy")

  6. //@MyAnn("lll")

  7. @MyAnnotations({@MyAnn("yyyy"), @MyAnn("llll")})

  8. public class MyAnnotationsTest {

  9. }


2. JDK8可重复注解的写法

  1. package com.ylaihui.annotation3;

  2. import java.lang.annotation.Repeatable;

  3. @Repeatable(MyAnnotations.class)

  4. public @interface MyAnn {

  5.     String value() default "ylaihui";

  6. }


  1. package com.ylaihui.annotation3;

  2. import java.lang.annotation.Repeatable;

  3. public @interface MyAnnotations {

  4.     MyAnn[] value();

  5. }


  1. //MyAnnotationsTest.java

  2. package com.ylaihui.annotation3;

  3. // JDK1.8 新特性,注解可重复,但是需要配置,以下两种写法等价

  4. @MyAnn("yyyy")

  5. @MyAnn("lll")

  6. //@MyAnnotations({@MyAnn("yyyy"), @MyAnn("llll")})

  7. public class MyAnnotationsTest {

  8. }


3. JDK8新特性类型注解

JDK1.8之后,关于元注解@Target的参数类型ElementType枚举值多了两个:TYPE_PARAMETER,TYPE_USE。

在Java 8之前, 注解只能是在声明的地方所使用, Java8开始, 注解可以应用在任何地方。

ElementType.TYPE_PARAMETER 表示该注解能写在类型变量的声明语句中(如: 泛型声明)  修饰的类型可以通过反射获取

ElementType.TYPE_USE 表示该注解能写在使用类型的任何语句中。


  1. package com.ylaihui.annotation4;

  2. import java.lang.annotation.Target;

  3. import static java.lang.annotation.ElementType.*;

  4. @Target({TYPE_PARAMETERTYPE_USE})

  5. public @interface MyAnn {

  6.     String[] value() default "ylaihui";

  7. }


  1. //AnnotationTest.java

  2. package com.ylaihui.annotation4;

  3. import java.util.ArrayList;

  4. class Annotations<@MyAnn T>{

  5.     public void info(@MyAnn String string) throws @MyAnn RuntimeException{

  6.         ArrayList<@MyAnn String> list = new ArrayList<>();

  7.         int d = (@MyAnn int)100.00;

  8.         System.out.println(string);

  9.     }

  10. }

  11. public class AnnotationTest {

  12.     public static void main(String[] args) {

  13.     }

  14. }


点赞 0

文章评论

欢迎您:

纸上得来终觉浅,绝知此事要躬行!

112 文章 69047 浏览 3 评论

联系我

  •   QQ:    361352119
  •  Email:  lisimmy@sina.com
  • 微信: