Groovy - 注解
注解 是一种元数据形式,它们为程序提供关于程序本身之外的数据。注解不会直接影响所注解代码的运行。
注解主要用于以下原因 −
为编译器提供信息 − 编译器可以使用注解来检测错误或抑制警告。
编译时和部署时处理 − 软件工具可以处理注解信息来生成代码、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 {}