我试图在单个元素(在本例中为方法)上添加两个或多个相同类型的注释。下面是我正在使用的大致代码:
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: duplicate annotation
难道就不可能像这样重复注释吗?从学究的角度讲,上面的两个@Foo实例不是因为内容不同而有所不同吗?
如果上述方法不可行,有哪些潜在的解决方法?
更新:我被要求描述我的用例。来吧。
我正在构建一个语法糖化机制,将POJO“映射”到MongoDB等文档存储。我希望允许将索引指定为getter或setter上的注释。下面是一个人为的例子:
public class Employee {
private List<Project> projects;
@Index(expr = "project.client_id")
@Index(expr = "project.start_date")
public List<Project> getProjects() { return projects; }
}
显然,我希望能够通过项目的各种属性快速找到Employee的实例。我可以使用不同的expr()值指定@Index两次,也可以采用接受答案中指定的方法。即使Hibernate做到了这一点,也不被认为是一种黑客行为,但我认为至少允许在单个元素上有多个相同类型的注释仍然是有意义的。