1. O que é uma anotação duplicada?
Permite múltiplos usos da mesma anotação no mesmo tipo declarado (classe, propriedade ou método)
2. Um exemplo simples
Antes do Java 8, também existiam soluções para reutilizar anotações, mas a legibilidade não era muito boa, como o seguinte código:
Copie o código do código da seguinte forma:
autoridade pública @interface {
String role();
}
public @interface Autoridades {
Autoridade[] valor();
}
classe pública RepeatAnnotationUseOldVersion {
@Autoridades({@Autoridade(role="Admin"),@Autoridade(role="Gerente")})
public void doSomeThing(){
}
}
Use outra anotação para armazenar anotações repetidas. Ao usá-la, use as autoridades de anotação de armazenamento para estender as anotações repetidas.
Copie o código do código da seguinte forma:
@Repetível(Autoridades.class)
autoridade pública @interface {
String role();
}
public @interface Autoridades {
Autoridade[] valor();
}
classe pública RepeatAnnotationUseNewVersion {
@Autoridade(role="Admin")
@Autoridade(role="Gerente")
public void doSomeThing(){ }
}
A diferença é que ao criar a anotação repetida Autoridade, adicione @Repeatable para apontar para as Autoridades de anotação armazenadas. Ao usá-la, a anotação Autoridade pode ser reutilizada diretamente. A partir do exemplo acima, podemos ver que a abordagem do Java 8 é mais adequada ao pensamento convencional e é mais legível.
3. Resumo
JEP120 não possui muito conteúdo, é um pequeno recurso apenas para melhorar a legibilidade do código. Desta vez, o Java 8 fez duas melhorias nas anotações (JEP 104, JEP120, acredito que as anotações serão usadas com mais frequência do que antes).