Além da retenção, existem outras três anotações fornecidas pelo JDK 5, como alvo, herdadas e documentadas.
O destino de destino é onde a anotação de destino é usada, que define o tempo da anotação que está sendo usada, ou seja, o tipo de elementos do programa aos quais a anotação é aplicável. Se uma meta -anotação de destino não existir na declaração do tipo de anotação, o tipo declarado poderá ser usado em qualquer elemento do programa. Se essa metaannotação existir, o compilador aplica o limite de uso especificado.
O alvo é definido da seguinte forma:
@Documentado@retention (retentionpolicy.runtime) @target (elementType.annotation_type) public @interface alvo {elementType [] value ();}Como você pode ver, o Target possui apenas um atributo de valor e seu tipo é o tipo enum elementType. A declaração ElementType é a seguinte:
public enum elementType { / ** anotações podem ser usadas em classes, interfaces (incluindo tipos de anotação) ou declarações de enum* / type, / ** declarações de campo (incluindo constantes enum)* / campo, / ** Declarações do método* / Método, / ** Declarações de parâmetro* / parâmetros, / ** ** Declarações do método* / ** Declarações do tipo de anotação* / anotation_type, / ** declarações do pacote* / pacote}As anotações documentadas indicam se as informações de anotação são adicionadas ao documento ao fabricar Javadoc. Se a anotação usar @Documented ao declarar, as informações de anotação serão adicionadas ao Javadoc ao fazer o Javadoc. A declaração de anotação é a seguinte:
@Documentado@retention (valor = tempo de execução) @target (value = anotation_type) // indica que essa anotação só pode ser usada ao declarar anotação, ou seja, meta anotação pública @interface documentada {}A anotação herdada também é uma meta -anotação, e a declaração é a seguinte:
@Documentado@retention (value = runwime) @target (value = anotation_type) public @interface herded {}As anotações herdadas indicam se as anotações serão herdadas por subclasses e o padrão não será herdado. Quando uma anotação é declarada, a anotação @Inerited é usada, a anotação será herdada por uma subclasse da classe usando a anotação.