- Groovy 教程
- Groovy - 首页
- Groovy - 概述
- Groovy - 环境
- Groovy - 基本语法
- Groovy - 数据类型
- Groovy - 变量
- Groovy - 运算符
- Groovy - 循环
- Groovy - 决策制定
- Groovy - 方法
- Groovy - 文件 I/O
- Groovy - 可选
- Groovy - 数字
- Groovy - 字符串
- Groovy - 范围
- Groovy - 列表
- Groovy - 映射
- Groovy - 日期和时间
- Groovy - 正则表达式
- Groovy - 异常处理
- Groovy - 面向对象
- Groovy - 泛型
- Groovy - 特性
- Groovy - 闭包
- Groovy - 注解
- Groovy - XML
- Groovy - JMX
- Groovy - JSON
- Groovy - DSL
- Groovy - 数据库
- Groovy - 构建器
- Groovy - 命令行
- Groovy - 单元测试
- Groovy - 模板引擎
- Groovy - 元对象编程
- Groovy 有用资源
- Groovy - 快速指南
- Groovy - 有用资源
- Groovy - 讨论
Groovy - 注解
注解 是一种元数据形式,它们提供有关程序的数据,而这些数据本身并不属于程序的一部分。注解对它们所注释的代码的操作没有直接影响。
注解主要用于以下原因:
编译器信息 - 注解可供编译器用于检测错误或抑制警告。
编译时和部署时处理 - 软件工具可以处理注解信息以生成代码、XML 文件等。
运行时处理 - 一些注解可在运行时进行检查。
在 Groovy 中,基本注解如下所示:
@interface - at 符号字符 (@) 指示编译器后面跟着的是一个注解。
注解可以在形式上定义成员,这些成员是无主体的方法,并具有可选的默认值。
注解可以应用于以下类型:
字符串类型
下面给出了字符串注解的示例:
@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 注解是基于类值创建的。然后将该注解应用于两个方法,这两个方法根据 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 {}
广告