Groovy - anotações
As anotações são uma forma de metadados em que fornecem dados sobre um programa que não faz parte do próprio programa. As anotações não têm efeito direto na operação do código que anotam.
As anotações são usadas principalmente pelos seguintes motivos -
Information for the compiler - As anotações podem ser usadas pelo compilador para detectar erros ou suprimir avisos.
Compile-time and deployment-time processing - As ferramentas de software podem processar informações de anotação para gerar código, arquivos XML e assim por diante.
Runtime processing - Algumas anotações estão disponíveis para serem examinadas em tempo de execução.
No Groovy, uma anotação básica se parece com a seguinte -
@interface - O caractere de arroba (@) indica ao compilador que o que se segue é uma anotação.
Uma anotação pode definir membros em the form de métodos sem corpos e um valor padrão opcional.
As anotações podem ser aplicadas aos seguintes tipos -
Tipo de corda
Um exemplo de uma anotação para uma string é fornecido abaixo -
@interface Simple {
String str1() default "HelloWorld";
}
Tipo Enum
enum DayOfWeek { mon, tue, wed, thu, fri, sat, sun }
@interface Scheduled {
DayOfWeek dayOfWeek()
}
Tipo de aula
@interface Simple {}
@Simple
class User {
String username
int age
}
def user = new User(username: "Joe",age:1);
println(user.age);
println(user.username);
Valores de membro de anotação
Quando uma anotação é usada, é necessário definir pelo menos todos os membros que não possuem um valor padrão. Um exemplo é dado abaixo. Quando a anotação Exemplo é usada após ser definida, ela precisa ter um valor atribuído a ela.
@interface Example {
int status()
}
@Example(status = 1)
Parâmetros de anotação de fechamento
Um bom recurso das anotações no Groovy é que você também pode usar um encerramento como um valor de anotação. Portanto, as anotações podem ser usadas com uma ampla variedade de expressões.
Um exemplo é dado a seguir. A anotação Onlyif é criada com base em um valor de classe. Em seguida, a anotação é aplicada a dois métodos que enviam mensagens diferentes para a variável de resultado com base no valor da variável de número.
@interface OnlyIf {
Class value()
}
@OnlyIf({ number<=6 })
void Version6() {
result << 'Number greater than 6'
}
@OnlyIf({ number>=6 })
void Version7() {
result << 'Number greater than 6'
}
Meta Anotações
Este é um recurso bastante útil de anotações no groovy. Pode haver momentos em que você pode ter várias anotações para um método como o mostrado abaixo. Às vezes, pode ser complicado ter várias anotações.
@Procedure
@Master class
MyMasterProcedure {}
Nesse caso, você pode definir uma meta-anotação que reúne várias anotações e aplicar a meta-anotação ao método. Portanto, para o exemplo acima, você pode primeiro definir a coleção de anotações usando o AnnotationCollector.
import groovy.transform.AnnotationCollector
@Procedure
@Master
@AnnotationCollector
Depois de fazer isso, você pode aplicar o seguinte meta-anotador ao método -
import groovy.transform.AnnotationCollector
@Procedure
@Master
@AnnotationCollector
@MasterProcedure
class MyMasterProcedure {}