Я намагаюся ляпати дві або більше анотацій одного типу на одному елементі, в даному випадку методу. Ось приблизний код, з яким я працюю:
public class Dupe {
public @interface Foo {
String bar();
}
@Foo(bar="one")
@Foo(bar="two")
public void haha() {}
}
Складаючи вищезазначене, javac скаржиться на дублікат анотації:
max @ upsight: ~ / work / daybreak $ 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 робить це, і це не вважається хакерством, я вважаю, що все одно має сенс принаймні дозволити мати кілька анотацій одного типу на одному елементі.