Java 8中的注解是可重复的。让我们直接深入看看例子,弄明白它是什么意思。 

首先,我们定义一个包装注解,它包括了一个实际注解的数组 

Java代码 
  1. @interface Hints {  
  2.     Hint[] value();  
  3. }  
  4.    
  5. @Repeatable(Hints.class)  
  6. @interface Hint {  
  7.     String value();  
  8. }  

只要在前面加上注解名:@Repeatable,Java 8 允许我们对同一类型使用多重注解: 

变体1:使用注解容器(老方法): 

Java代码 
  1. @Hints({@Hint("hint1"), @Hint("hint2")})  
  2. class Person {}  

变体2:使用可重复注解(新方法): 

Java代码 
  1. @Hint("hint1")  
  2. @Hint("hint2")  
  3. class Person {}  

使用变体2,Java编译器能够在内部自动对@Hint进行设置。这对于通过反射来读取注解信息来说,是非常重要的。 

Java代码 
  1. Hint hint = Person.class.getAnnotation(Hint.class);  
  2. System.out.println(hint);                   // null  
  3.    
  4. Hints hints1 = Person.class.getAnnotation(Hints.class);  
  5. System.out.println(hints1.value().length);  // 2  
  6.    
  7. Hint[] hints2 = Person.class.getAnnotationsByType(Hint.class);  
  8. System.out.println(hints2.length);          // 2  

尽管我们绝对不会在Person类上声明@Hints注解,但是它的信息仍然可以通过getAnnotation(Hints.class)来读取。并且,getAnnotationsByType方法会更方便,因为它赋予了所有@Hints注解标注的方法直接的访问权限。 

Java代码 
  1. @Target({ElementType.TYPE_PARAMETER, ElementType.TYPE_USE})  
  2. @interface MyAnnotation {}  

延伸阅读

向着Java前进-Java培训,做最负责任的教育,学习改变命运,软件学习,再就业,大学生如何就业,帮大学生找到好工作,lphotoshop培训,电脑培训,电脑维修培训,移动软件开发培训,网站设计培训,网站建设培训向着Java前进