Sto tentando di eseguire lo slap di due o più annotazioni dello stesso tipo su un singolo elemento, in questo caso, un metodo. Ecco il codice approssimativo che sto lavorando con:Più annotazioni dello stesso tipo su un elemento?
public class Dupe {
public @interface Foo {
String bar();
}
@Foo(bar="one")
@Foo(bar="two")
public void haha() {}
}
Quando si compila quanto sopra, javac lamenta un'annotazione duplicato:
[email protected]:~/work/daybreak$ javac Dupe.java Dupe.java:5: duplicate annotation
non è semplicemente possibile ripetere le annotazioni come questo? Pedanticamente parlando, le due istanze di @Foo non sono diverse a causa del fatto che i loro contenuti sono diversi?
Se quanto sopra non è possibile, quali sono alcuni possibili soluzioni?
AGGIORNAMENTO: Mi è stato chiesto di descrivere il mio caso d'uso. Ecco qui.
Sto costruendo un meccanismo sbrigativo di sintassi per "mappare" POJO per documentare negozi come MongoDB. Voglio consentire che gli indici siano specificati come annotazioni sui getter o setter. Ecco un esempio inventato:
public class Employee {
private List<Project> projects;
@Index(expr = "project.client_id")
@Index(expr = "project.start_date")
public List<Project> getProjects() { return projects; }
}
Ovviamente, voglio essere in grado di trovare rapidamente le istanze di dipendenti da varie proprietà del progetto. Posso specificare @Index due volte con valori diversi di expr() o adottare l'approccio specificato nella risposta accettata. Anche se Hibernate fa questo e non è considerato un hack, penso che abbia ancora senso permettere almeno di avere più annotazioni dello stesso tipo su un singolo elemento.
C'è sforzo per avere questa regola duplicata rilassarsi per consentire il programma in Java 7. Puoi descrivere il tuo caso d'uso per favore? – notnoop
Ho modificato la mia domanda con una descrizione del perché voglio farlo. Grazie. –
Potrebbe essere utile in CDI per consentire a un bean di essere fornito per più qualificatori. Ad esempio, ho appena provato a riutilizzare un bean in due punti qualificandolo "@Produces @PackageName (" test1 ") @PackageName (" test2 ")" –