Groovy 注解怎么用?

文章导读
Previous Quiz Next 注解 是一种元数据形式,它们为程序提供关于程序本身之外的数据。注解不会直接影响所注解代码的运行。
📋 目录
  1. String 类型
  2. Enum 类型
  3. Class 类型
  4. 注解成员值
  5. 闭包注解参数
  6. 元注解
A A

Groovy - 注解



Previous
Quiz
Next

注解 是一种元数据形式,它们为程序提供关于程序本身之外的数据。注解不会直接影响所注解代码的运行。

注解主要用于以下原因 −

  • 为编译器提供信息 − 编译器可以使用注解来检测错误或抑制警告。

  • 编译时和部署时处理 − 软件工具可以处理注解信息来生成代码、XML 文件等。

  • 运行时处理 − 某些注解可以在运行时被检查。

在 Groovy 中,基本的注解如下所示 −

@interface - @ 符号告诉编译器后面跟着的是一个注解。

注解可以定义成员,这些成员以方法的形式出现,没有方法体,并可选择带有默认值。

注解可以应用于以下类型 −

String 类型

以下是一个字符串注解的示例 −

@interface Simple { 
   String str1() default "HelloWorld"; 
}

Enum 类型

enum DayOfWeek { mon, tue, wed, thu, fri, sat, sun } 
@interface Scheduled {
   DayOfWeek dayOfWeek() 
} 

Class 类型

@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 基于 class 值创建。然后将该注解应用于两个方法,这些方法根据 number 变量的值向 result 变量发送不同的消息。

@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 {}