He estado usando el AOP de Guice para interceptar algunas llamadas a métodos. Mi clase implementa una interfaz y me gustaría anotar los métodos de la interfaz para que Guice pueda seleccionar los métodos correctos. Incluso si el tipo de anotación está anotado con Anotación heredada , la clase de implementación no hereda la anotación como se indica en el documento java de Inherited:
Tenga en cuenta también que esta meta-anotación solo hace que las anotaciones se hereden de las superclases; las anotaciones en las interfaces implementadas no tienen ningún efecto.
¿Cuál podría ser la razón de ésto? Conocer todas las interfaces que implementa la clase de un objeto en tiempo de ejecución no es tan difícil de hacer, por lo que debe haber una buena razón detrás de esta decisión.
fuente
The field value is ambiguous.
error de compilador similar al de dos interfaces que declaran la misma constante con valores diferentes. Sé que esto no es un campo, pero los valores de anotación se resuelven todos en tiempo de compilación, ¿no es así? La función que nos falta aquí sería muy útil en muchos casos. Perdón por revivir una publicación anterior, por cierto :).Foo
anotación 's (MyClass
no tiene una, entonces las interfaces se buscan y se toman en el orden en que están despuésimplements
) y por lo tanto imprimir "baz". Frio.Desde el Javadoc para @Inherited:
Por otro lado, los validadores JSR 305 realizan algún tipo de búsqueda de herencia. Si tiene una jerarquía de clases:
Entonces las validaciones efectivas
Student.getAge()
son@Nonnull @Min(5)
.@Nonnull
no tiene@Inherited
meta-anotación.fuente
@Inherited
no tiene ningún efecto en nada más que en la clase