Groovy - 注解

  • 简述

    注解是元数据的一种形式,其中它们提供有关程序的数据,但该程序不是程序本身的一部分。注解对它们所注解的代码的运行没有直接影响。
    注解主要用于以下原因 -
    • 为编译器提供信息 - 编译器可以使用注解来检测错误或抑制警告。
    • 编译时和部署时处理- 软件工具可以处理注解信息以生成代码、XML 文件等。
    • 运行时处理- 一些注解可在运行时检查。
    在 Groovy 中,一个基本的注解如下所示:
    @interface - 符号字符 (@) 向编译器指示后面是注解。
    注解可以以没有主体和可选默认值的方法的形式定义成员。
    注解可以应用于以下类型 -
  • 字符串类型

    下面给出了字符串注解的示例 -
    
    @interface Simple { 
       String str1() default "HelloWorld"; 
    }
    
  • 枚举类型

    
    enum DayOfWeek { mon, tue, wed, thu, fri, sat, sun } 
    @interface Scheduled {
       DayOfWeek dayOfWeek() 
    } 
    
  • 班级类型

    
    @interface Simple {} 
    @Simple 
    class User {
       String username
       int age
    }
     
    def user = new User(username: "Joe",age:1); 
    println(user.age); 
    println(user.username);
    
  • 注解成员值

    使用注解时,要求至少设置所有没有默认值的成员。下面给出了一个例子。注解Example定义后使用时,需要为其赋值。
    
    @interface Example {
       int status() 
    }
    @Example(status = 1)
    
  • 闭包注解参数

    Groovy 中注解的一个很好的特性是您也可以使用闭包作为注解值。因此,注解可以与各种各样的表达式一起使用。
    下面给出了一个例子。注解 Onlyif 是基于类值创建的。然后将注解应用于两种方法,这两种方法根据数字变量的值将不同的消息发布到结果变量。
    
    @interface OnlyIf {
       Class value() 
    }  
    @OnlyIf({ number<=6 }) 
    void Version6() {
       result << 'Number greater than 6' 
    } 
    @OnlyIf({ number>=6 }) 
    void Version7() {
       result << 'Number greater than 6' 
    }
    
  • 元注解

    这是 groovy 中注解的一个非常有用的特性。有时您可能对一个方法有多个注解,如下所示。有时,如果有多个注解,这会变得很混乱。
    
    @Procedure 
    @Master class 
    MyMasterProcedure {} 
    
    在这种情况下,您可以定义一个元注解,它将多个注解组合在一起,并将元注解应用于该方法。因此,对于上面的示例,您可以首先使用 AnnotationCollector 定义注解集合。
    
    import groovy.transform.AnnotationCollector
      
    @Procedure 
    @Master 
    @AnnotationCollector
    
    完成后,您可以将以下元注解器应用于该方法 -
    
    import groovy.transform.AnnotationCollector
      
    @Procedure 
    @Master 
    @AnnotationCollector
      
    @MasterProcedure 
    class MyMasterProcedure {}