Я пытаюсь наложить две или более аннотаций одного типа на один элемент, в данном случае метод. Вот примерный код, с которым я работаю:
public class Dupe {
public @interface Foo {
String bar();
}
@Foo(bar="one")
@Foo(bar="two")
public void haha() {}
}
При компиляции вышеуказанного javac жалуется на дублирующуюся аннотацию:
макс @ апсайт: ~ / работа / рассвет $ javac Dupe.java Dupe.java:5: повторяющаяся аннотация
Разве нельзя повторять подобные аннотации? Говоря педантично, разве два приведенных выше экземпляра @Foo не отличаются из-за того, что их содержимое отличается?
Если это невозможно, каковы возможные обходные пути?
ОБНОВЛЕНИЕ: меня попросили описать мой вариант использования. Вот оно.
Я создаю синтаксический сахарный механизм для «сопоставления» POJO с хранилищами документов, такими как MongoDB. Я хочу разрешить указывать индексы в виде аннотаций для геттеров или сеттеров. Вот надуманный пример:
public class Employee {
private List<Project> projects;
@Index(expr = "project.client_id")
@Index(expr = "project.start_date")
public List<Project> getProjects() { return projects; }
}
Очевидно, я хочу иметь возможность быстро находить экземпляры Employee по различным свойствам Project. Я могу либо дважды указать @Index с разными значениями expr (), либо воспользоваться подходом, указанным в принятом ответе. Несмотря на то, что Hibernate делает это, и это не считается взломом, я думаю, что все же имеет смысл хотя бы разрешить наличие нескольких аннотаций одного типа для одного элемента.