Учебники

Groovy — Аннотации

Аннотации представляют собой форму метаданных, в которой они предоставляют данные о программе, которая не является частью самой программы. Аннотации не оказывают прямого влияния на работу кода, который они аннотируют.

Аннотации в основном используются по следующим причинам —

  • Информация для компилятора — аннотации могут использоваться компилятором для обнаружения ошибок или подавления предупреждений.

  • Обработка во время компиляции и во время развертывания. Программные средства могут обрабатывать информацию аннотаций для генерации кода, файлов XML и т. Д.

  • Обработка во время выполнения — некоторые аннотации доступны для изучения во время выполнения.

Информация для компилятора — аннотации могут использоваться компилятором для обнаружения ошибок или подавления предупреждений.

Обработка во время компиляции и во время развертывания. Программные средства могут обрабатывать информацию аннотаций для генерации кода, файлов XML и т. Д.

Обработка во время выполнения — некоторые аннотации доступны для изучения во время выполнения.

В Groovy основная аннотация выглядит следующим образом:

@interface — Символ знака (@) указывает компилятору, что ниже следует аннотация.

Аннотация может определять элементы в форме методов без тел и необязательного значения по умолчанию.

Аннотации могут быть применены к следующим типам —

Тип строки

Пример аннотации для строки приведен ниже —

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

Тип enum

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);

Значения членов аннотации

Когда используется аннотация, необходимо установить как минимум все элементы, которые не имеют значения по умолчанию. Пример приведен ниже. Когда пример аннотации используется после определения, ему необходимо присвоить значение.

@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

Как только это будет сделано, вы можете применить следующий мета-аннотатор к методу: