Quando crio anotações e utilizo essas anotações para os atributos de uma classe, porém essa classe possue um extends a outra classe que também possuem anotações, como consigo ler as anotações dessa extends, pois executando somente classe.getAnnotation(ANOTACAO.class).valor() ele só faz a leitura da classe em questão, mas como faço da classe extend?
Olhei o @Inherited, funcionou para o caso de anotação do tipo TYPE, mas não é isso que preciso, segue abaixo um exemplo do que estou tentando fazer:
primeira anotação
@Inherited
@Documented
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface TITLE {
int valor();
}
Segunda anotação
@Documented
@Inherited
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface CAMPO{
int tmn();
}
Classe Pai
public class Padrao {
@TITLE(valor=1)
private String titulo;
public String getTitulo() {
return titulo;
}
public void setTitulo(String titulo) {
this.titulo = titulo;
}
}
Classe que faz extend da PAdrao
public class Classex extends Padrao{
@CAMPO(tmn = 1)
private String opcao;
public String getOpcao() {
return opcao;
}
public void setOpcao(String opcao) {
this.opcao = opcao;
}
}
Exemplo de Teste
nesse código abaixo, não consigo pegar o valor da anotação da variável anotada na classe Padrao, anotada com @TITLE, através da Classex que extend Padrao. Eu queria pegar as anotações das duas classes através de uma.
Field[] fds = classex.getClass().getDeclaredFields();
for (Field fi : fds) {
System.out.println(fi.getAnnotation(TITLE.class).valor());
}
“Note that this meta-annotation type has no effect if the annotated type is used to annotate anything other than a class. Note also that this meta-annotation only causes annotations to be inherited from superclasses; annotations on implemented interfaces have no effect.”
Sim, como antes você não tinha falado que a anotação era aplicada em métodos… você pode buscar a anotação recursivamente até a classe imediatamente abaixo de Object. Existe um projeto https://github.com/pcollaog/annotation-utils que irá te ajudar bastante.