多个注解
Multiple annotations
由于不可能在同一个目标上有重复的注释,我正在研究解决方法。我需要的可能是:
@Parent(sex="F", name="Alice")
@Parent(sex="M", name="Bob")
@Sibling(sex="M", name="Charlie")
@Sibling(sex="M", name="Dan")
@Sibling(sex="F", name="Eve")
我已经添加了另一个注释 @Relatives 来包含它们,将值成员声明为 Relative 注释的数组。
@Relatives({
@Parent(sex="F", name="Alice")
@Parent(sex="M", name="Bob")
@Sibling(sex="M", name="Charlie")
@Sibling(sex="M", name="Dan")
@Sibling(sex="F", name="Eve")
})
但是我不能定义这样的数组,因为@Parent 和@Sibling @interfaces 不能扩展任何@Relative 超类。
除了定义两个不同的数组 Sibling[] siblings 和 Parent[] parents 之外,还有其他方法吗?但这会产生类似
的东西
@Relatives(
parents={
@Parent(sex="F", name="Alice"),
@Parent(sex="M", name="Bob")
}
siblings={
@Sibling(sex="M", name="Charlie")
@Sibling(sex="M", name="Dan")
@Sibling(sex="F", name="Eve")
}
)
在 1.8 中,您有一个半生不熟的可重复注释方式,请参阅 java.lang.annotation.Repeatable 诀窍是您仍然需要声明您的 @Parents 和 @Siblings,但是:
使用时,包含的注解可以省略
在扫描(内省)它们时,在这种情况下,您会在它们包含的注释(@Parents
和 @Siblings
)中找到可重复的注释。
public @interface Parents {
Parent[] value();
}
// this says: will be repeated inside a `Parents` nest
@Repeatable(Parents.class)
public @interface Parent {
String name();
String sex() default "F";
}
那么你可以
@Parent(sex="F", name="Alice"),
@Parent(sex="M", name="Bob")
Child firstChild;
由于不可能在同一个目标上有重复的注释,我正在研究解决方法。我需要的可能是:
@Parent(sex="F", name="Alice")
@Parent(sex="M", name="Bob")
@Sibling(sex="M", name="Charlie")
@Sibling(sex="M", name="Dan")
@Sibling(sex="F", name="Eve")
我已经添加了另一个注释 @Relatives 来包含它们,将值成员声明为 Relative 注释的数组。
@Relatives({
@Parent(sex="F", name="Alice")
@Parent(sex="M", name="Bob")
@Sibling(sex="M", name="Charlie")
@Sibling(sex="M", name="Dan")
@Sibling(sex="F", name="Eve")
})
但是我不能定义这样的数组,因为@Parent 和@Sibling @interfaces 不能扩展任何@Relative 超类。
除了定义两个不同的数组 Sibling[] siblings 和 Parent[] parents 之外,还有其他方法吗?但这会产生类似
的东西@Relatives(
parents={
@Parent(sex="F", name="Alice"),
@Parent(sex="M", name="Bob")
}
siblings={
@Sibling(sex="M", name="Charlie")
@Sibling(sex="M", name="Dan")
@Sibling(sex="F", name="Eve")
}
)
在 1.8 中,您有一个半生不熟的可重复注释方式,请参阅 java.lang.annotation.Repeatable 诀窍是您仍然需要声明您的 @Parents 和 @Siblings,但是:
使用时,包含的注解可以省略
在扫描(内省)它们时,在这种情况下,您会在它们包含的注释(
@Parents
和@Siblings
)中找到可重复的注释。
public @interface Parents { Parent[] value(); } // this says: will be repeated inside a `Parents` nest @Repeatable(Parents.class) public @interface Parent { String name(); String sex() default "F"; }
那么你可以
@Parent(sex="F", name="Alice"),
@Parent(sex="M", name="Bob")
Child firstChild;