Java 多注释

Java 多注释,java,annotations,hierarchical-data,Java,Annotations,Hierarchical Data,因为在同一个目标上不可能有重复的注释,所以我正在为它制定一个解决方案。我需要的可能是: @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来包含它们,将值成员声明为一个相对注释数组 @Relativ

因为在同一个目标上不可能有重复的注释,所以我正在为它制定一个解决方案。我需要的可能是:

@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来包含它们,将值成员声明为一个相对注释数组

@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@接口不能扩展任何@Relative超类

除了定义两个不同的数组同级[]同级和父[]父之外,还有其他方法吗?但这会产生类似于

@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中,您有一种不成熟的可重复注释的方法,请注意,诀窍是您仍然需要声明您的@Parents和@brothers,但是:

  • 使用它们时,可以省略包含注释的部分

  • 在扫描(内省)它们时,您会在它们包含注释的内部找到可重复的注释(
    @Parents
    @birds


  • 另请参见

    您使用的Java版本?1.6:(但我对更新的虚拟机也感兴趣,这对我来说似乎很好。)欢迎来到Java世界。顺便说一句,Java8允许存在相同类型的多个注释。您应该检查是否可以迁移到较新的版本。 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;