Ler anotações da classe extend

Boa noite,

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?

Obrigado.

Olha a meta-annotation @Inherited

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

}

http://docs.oracle.com/javase/6/docs/api/java/lang/annotation/Inherited.html

“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.”

Ok, isso eu tinha visto, mas quero saber se existe alguma forma de resolver essa situação.

Existe?

Talvez eu conseguir identificar a classe Padrao através da Classex e assim conseguir ler as anotações dela. É possível?

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.