Tenho usado o AOP do Guice para interceptar algumas chamadas de método. Minha classe implementa uma interface e eu gostaria de anotar os métodos da interface para que o Guice pudesse selecionar os métodos corretos. Mesmo que o tipo de anotação seja anotado com a classe de implementação Inherited annotation, ela não herda a anotação conforme declarado no documento java de Inherited:
Observe também que esta meta-anotação apenas faz com que as anotações sejam herdadas das superclasses; as anotações nas interfaces implementadas não têm efeito.
Qual poderia ser o motivo disso? Conhecer todas as interfaces que uma classe de objeto implementa em tempo de execução não é tão difícil de fazer, portanto, deve haver um bom motivo para essa decisão.
fonte
The field value is ambiguous.
erro do compilador semelhante ao de duas interfaces declarando a mesma constante com valores diferentes. Eu sei que este não é um campo, mas os valores das anotações são todos resolvidos em tempo de compilação, não é? O recurso que estamos perdendo aqui seria muito útil em muitos casos. A propósito, desculpe por reviver um post antigo :).Foo
anotação de (MyClass
não tem uma, então as interfaces são pesquisadas e obtidas na ordem em que estão depoisimplements
) e, portanto, imprimirá "baz". Legal.Do Javadoc para @Inherited:
Por outro lado, os validadores JSR 305 fazem algum tipo de pesquisa de herança. Se você tem uma hierarquia de classes:
Então as validações efetivas em
Student.getAge()
são@Nonnull @Min(5)
.@Nonnull
não tem@Inherited
meta-anotação.fonte
@Inherited
não tem efeito em nada além da classe