Ich versuche, zwei oder mehr Anmerkungen des gleichen Typs auf ein einzelnes Element, in diesem Fall eine Methode zu schlagen. Hier ist der ungefähre Code, ich arbeite mit:Mehrere Annotationen des gleichen Typs auf einem Element?
public class Dupe {
public @interface Foo {
String bar();
}
@Foo(bar="one")
@Foo(bar="two")
public void haha() {}
}
Beim Kompilieren der oben Javac beschwert sich über eine doppelte Anmerkung:
[email protected]:~/work/daybreak$ javac Dupe.java Dupe.java:5: duplicate annotation
Ist es einfach nicht möglich, Anmerkungen wie diese zu wiederholen? Sind die beiden Instanzen von @Foo nicht pedantisch unterschiedlich, weil ihre Inhalte unterschiedlich sind?
Wenn das obige nicht möglich ist, was sind einige mögliche Problemumgehungen?
UPDATE: Ich wurde gebeten, meinen Anwendungsfall zu beschreiben. Hier geht.
Ich bin ein Syntax Sugarish-Mechanismus zum "Mappen" POJOs zu Dokumenten speichert wie MongoDB. Ich möchte zulassen, dass Indizes als Anmerkungen auf den Gettern oder Sätzen angegeben werden. Hier ist ein konstruiertes Beispiel:
public class Employee {
private List<Project> projects;
@Index(expr = "project.client_id")
@Index(expr = "project.start_date")
public List<Project> getProjects() { return projects; }
}
Offensichtlich möchte ich schnell in der Lage sein, um Fälle von Mitarbeiter durch verschiedene Eigenschaften des Projekts zu finden. Ich kann @Index entweder zweimal mit verschiedenen expr() - Werten angeben oder den in der akzeptierten Antwort angegebenen Ansatz wählen. Obwohl Hibernate dies tut und nicht als Hack betrachtet wird, halte ich es immer noch für sinnvoll, zumindest mehrere Annotationen desselben Typs auf einem einzelnen Element zuzulassen.
Es ist ein Bemühen Sie sich, diese doppelte Regel zu lockern, um Ihr Programm in Java 7 zu erlauben. Können Sie bitte Ihren Anwendungsfall beschreiben? – notnoop
Ich habe meine Frage mit einer Beschreibung bearbeitet, warum ich das machen möchte. Vielen Dank. –
In CDI könnte es praktisch sein, eine Bean für mehrere Qualifier bereitzustellen. Zum Beispiel habe ich gerade versucht, eine Bohne an zwei Stellen wiederzuverwenden, indem ich sie "@Producedes @PackageName (" test1 ") @PackageName (" test2 ")" –