Plusieurs annotations du même type sur un élément?

Je suis tenter de la gifler deux ou plusieurs annotations du même type sur un seul élément, dans ce cas, une méthode. Ici l'approximative de code que je travaille avec:

public class Dupe {
    public @interface Foo {
      String bar();
    }

    @Foo(bar="one")
    @Foo(bar="two")
    public void haha() {}
}

Lors de la compilation ci-dessus, javac se plaint d'une double annotation:

max@upsight:~/work/aube$ javac Dupe.java 
Dupe.java:5: double annotation 

Est-il tout simplement pas possible de répéter les annotations de ce genre? Manière affectée de parler, ne sont pas les deux instances de @Foo ci-dessus différents, en raison de leur contenu différent?

Si ce qui précède n'est pas possible, quelles sont les solutions potentielles?

Mise à JOUR: j'ai été demandé de décrire mon cas d'utilisation. Va ici.

Je suis en train de construire une syntaxe sugarish mécanisme de "carte" Pojo du document dans les magasins comme MongoDB. Je veux permettre à des index spécifié que les annotations sur les getters ou organismes de normalisation. 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 être en mesure de trouver rapidement les instances de l'Employé par diverses propriétés de Projet. Je peux spécifier @Index à deux reprises avec différents expr() les valeurs, ou de prendre l'approche spécifié dans la accepté de répondre. Même si Hibernate fait cela, et il n'est pas considéré comme un hack, je pense qu'il a encore un sens pour au moins permettre d'avoir plusieurs annotations du même type sur un seul élément.

  • Il y a un effort pour avoir cette double règle de se détendre pour permettre à votre programme en Java 7. Pouvez-vous décrire votre cas d'utilisation, s'il vous plaît?
  • J'ai édité ma question avec une description de pourquoi je veux faire ce. Merci.
  • Il pourrait être utile en CDI pour permettre à un haricot d'être fourni pour plusieurs qualificatifs. Par exemple, j'ai juste essayé de réutiliser un haricot dans deux endroits en le qualifiant de "@Produit @PackageName("test1") @PackageName("test2")"
  • Plus loin: La réponse ci-dessous ne permet pas de résoudre ce problème parce que le CDI serait de voir les composites comme un Qualificatif.
InformationsquelleAutor Max A. | 2009-10-12