最佳答案
我试图在一个元素上添加两个或多个相同类型的注释,在本例中是一个方法。下面是我正在处理的大致代码:
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; }
}
显然,我希望能够通过 Project 的各种属性快速查找 Employee 实例。我可以使用不同的 expr ()值指定@Index 两次,或者采用接受答案中指定的方法。尽管 Hibernate 可以做到这一点,而且它不被认为是一种黑客行为,但我认为至少允许在一个元素上有多个相同类型的注释是有意义的。