Próbuję uderzyć dwie lub więcej adnotacji tego samego typu na jednym elemencie, w tym przypadku na metodzie. Oto przybliżony kod, z którym pracuję:
public class Dupe {
public @interface Foo {
String bar();
}
@Foo(bar="one")
@Foo(bar="two")
public void haha() {}
}
Podczas kompilowania powyższego javac narzeka na zduplikowaną adnotację:
max @ upsight: ~ / work / daybreak $ javac Dupe.java Dupe.java:5: zduplikowana adnotacja
Czy po prostu nie można powtórzyć takich adnotacji? Mówiąc pedantycznie, czy te dwa wystąpienia @Foo powyżej nie są różne, ponieważ ich zawartość jest inna?
Jeśli powyższe nie jest możliwe, jakie są potencjalne obejścia?
UPDATE: Poproszono mnie o opisanie mojego przypadku użycia. Tutaj idzie.
Buduję mechanizm łagodnej składni, aby „mapować” POJO na magazyny dokumentów, takie jak MongoDB. Chcę zezwolić na określanie indeksów jako adnotacji na elementach pobierających lub ustawiających. Oto wymyślony przykład:
public class Employee {
private List<Project> projects;
@Index(expr = "project.client_id")
@Index(expr = "project.start_date")
public List<Project> getProjects() { return projects; }
}
Oczywiście chcę móc szybko znaleźć wystąpienia pracownika według różnych właściwości projektu. Mogę określić @Index dwukrotnie z różnymi wartościami wyrażenia () lub zastosować podejście określone w zaakceptowanej odpowiedzi. Mimo że Hibernate to robi i nie jest to uważane za hack, myślę, że warto przynajmniej zezwolić na posiadanie wielu adnotacji tego samego typu na jednym elemencie.