【发布时间】:2022-01-03 18:25:17
【问题描述】:
我试图在单个元素上添加两个或多个相同类型的注释,在本例中是一个方法。这是我正在使用的大致代码:
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,但我认为至少允许在单个元素上具有多个相同类型的注释仍然是有意义的。
【问题讨论】:
-
正在努力放宽这个重复规则,以允许您的程序使用 Java 7。请描述一下您的用例吗?
-
我已经编辑了我的问题,并说明了我为什么要这样做。谢谢。
-
在 CDI 中允许为多个限定符提供一个 bean 可能很方便。例如,我刚刚尝试通过限定它在两个地方重用 bean "@Produces @PackageName("test1") @PackageName("test2")"
-
进一步:下面的答案并不能解决这个问题,因为 CDI 会将复合材料视为一个限定符。
-
@MaxA。请将您的“绿色支票”接受更改为 the correct Answer by mernst。 Java 8 增加了重复注解的能力。
标签: java annotations