J'essaie de gifler deux ou plusieurs annotations du même type sur un seul élément, dans ce cas, une méthode. Voici le code approximatif avec lequel je travaille:
public class Dupe {
public @interface Foo {
String bar();
}
@Foo(bar="one")
@Foo(bar="two")
public void haha() {}
}
Lors de la compilation de ce qui précède, javac se plaint d'une annotation en double:
max @ upsight: ~ / work / daybreak $ javac Dupe.java Dupe.java:5: annotation en double
N'est-il tout simplement pas possible de répéter des annotations comme celle-ci? Pédantiquement parlant, les deux instances de @Foo ci-dessus ne sont-elles pas différentes en raison de leur contenu différent?
Si ce qui précède n'est pas possible, quelles sont les solutions de contournement potentielles?
MISE À JOUR: on m'a demandé de décrire mon cas d'utilisation. Voici.
Je construis un mécanisme de syntaxe sucré pour "mapper" les POJO aux magasins de documents tels que MongoDB. Je veux permettre aux index d'être spécifiés comme annotations sur les getters ou les setters. Voici un exemple artificiel:
public class Employee {
private List<Project> projects;
@Index(expr = "project.client_id")
@Index(expr = "project.start_date")
public List<Project> getProjects() { return projects; }
}
Évidemment, je veux pouvoir trouver rapidement des instances de Employee par différentes propriétés de Project. Je peux soit spécifier @Index deux fois avec des valeurs expr () différentes, soit adopter l'approche spécifiée dans la réponse acceptée. Même si Hibernate fait cela et que ce n'est pas considéré comme un hack, je pense qu'il est toujours logique de permettre au moins d'avoir plusieurs annotations du même type sur un seul élément.