Я пытаюсь побить две или более аннотации одного и того же типа в одном элементе, в данном случае - методе. Вот приблизительный код, с которым я работаю:
public class Dupe {
public @interface Foo {
String bar();
}
@Foo(bar="one")
@Foo(bar="two")
public void haha() {}
}
При компиляции выше, javac жалуется на дублируемую аннотацию:
[email protected]:~/work/daybreak$ javac Dupe.java Dupe.java:5: duplicate annotation
Можно ли просто повторять аннотации? Педально говоря, не являются ли два экземпляра @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 различными свойствами проекта. Я могу либо указать @Index дважды с разными значениями expr(), либо принять подход, указанный в принятом ответе. Несмотря на то, что Hibernate делает это, и это не считается взломом, я думаю, что по-прежнему имеет смысл хотя бы разрешить иметь несколько аннотаций одного и того же типа в одном элементе.