我试图在单个元素上添加两个或更多相同类型的注释,在本例中是一个方法。这是我正在使用的大概代码:
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 等文档存储。我想允许将索引指定为 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 这样做并且它不被认为是 hack,但我认为至少允许在单个元素上具有相同类型的多个注释仍然有意义。
原文由 Max A. 发布,翻译遵循 CC BY-SA 4.0 许可协议
注意:由于 Java 8 引入了
@Repeatable
注释,此答案部分已过时(请参阅@mernst 的回答)。对@Foos
容器注释和专用处理的需求仍然存在。不允许使用两个或多个相同类型的注释。但是,您可以这样做:
不过,您需要在代码中专门处理
Foos
注释。