J'ai utilisé l'AOP de Guice pour intercepter certains appels de méthode. Ma classe implémente une interface et j'aimerais annoter les méthodes d'interface afin que Guice puisse sélectionner les bonnes méthodes. Même si le type d'annotation est annoté avec la classe d'implémentation d'annotation Inherited n'hérite pas de l'annotation comme indiqué dans la documentation java d'Inherited:
Notez également que cette méta-annotation entraîne uniquement l'héritage des annotations des superclasses; les annotations sur les interfaces implémentées n'ont aucun effet.
Quelle pourrait être la raison de cela? Connaître toutes les interfaces que la classe d'un objet implémente au moment de l'exécution n'est pas si difficile à faire, il doit donc y avoir une bonne raison derrière cette décision.
la source
The field value is ambiguous.
erreur de compilateur semblable à celle de deux interfaces déclarant la même constante avec des valeurs différentes. Je sais que ce n'est pas un champ, mais les valeurs d'annotation sont toutes résolues au moment de la compilation, n'est-ce pas? La fonctionnalité qui nous manque ici serait très utile dans de nombreux cas. Désolé d'avoir relancé un ancien message, au fait :).Foo
annotation de 's (MyClass
n'en a pas, alors les interfaces sont recherchées et prises dans l'ordre dans lequel elles sont aprèsimplements
) et donc afficher "baz". Cool.Depuis le Javadoc pour @Inherited:
D'autre part, les validateurs JSR 305 effectuent une sorte de recherche d'héritage. Si vous avez une hiérarchie de classes:
Ensuite, les validations effectives sur
Student.getAge()
sont@Nonnull @Min(5)
.@Nonnull
n'a pas@Inherited
méta-annotation.la source
@Inherited
n'a aucun effet sur autre chose que la classe