Ich versuche, zwei oder mehr Anmerkungen desselben Typs auf ein einzelnes Element, in diesem Fall eine Methode, zu übertragen. Hier ist der ungefähre Code, mit dem ich arbeite:
public class Dupe {
public @interface Foo {
String bar();
}
@Foo(bar="one")
@Foo(bar="two")
public void haha() {}
}
Beim Kompilieren der obigen Informationen beschwert sich javac über eine doppelte Anmerkung:
max @ upsight: ~ / work / daybreak $ javac Dupe.java Dupe.java:5: doppelte Anmerkung
Ist es einfach nicht möglich, solche Anmerkungen zu wiederholen? Sind die beiden oben genannten Instanzen von @Foo pedantisch gesehen nicht unterschiedlich, da ihre Inhalte unterschiedlich sind?
Wenn dies nicht möglich ist, welche möglichen Problemumgehungen gibt es?
UPDATE: Ich wurde gebeten, meinen Anwendungsfall zu beschreiben. Hier geht.
Ich baue einen zuckerhaltigen Syntaxmechanismus auf, um POJOs Dokumentenspeichern wie MongoDB zuzuordnen. Ich möchte zulassen, dass Indizes als Anmerkungen zu den Gettern oder Setzern angegeben werden. Hier ist ein erfundenes Beispiel:
public class Employee {
private List<Project> projects;
@Index(expr = "project.client_id")
@Index(expr = "project.start_date")
public List<Project> getProjects() { return projects; }
}
Natürlich möchte ich in der Lage sein, Instanzen von Mitarbeitern anhand verschiedener Eigenschaften von Project schnell zu finden. Ich kann entweder @Index zweimal mit unterschiedlichen expr () -Werten angeben oder den in der akzeptierten Antwort angegebenen Ansatz wählen. Obwohl Hibernate dies tut und es nicht als Hack betrachtet wird, halte ich es dennoch für sinnvoll, zumindest mehrere Annotationen desselben Typs für ein einzelnes Element zuzulassen.