将数组传递给注释的语法

时间:2014-07-15 09:23:46

标签: java arrays annotations arguments argument-passing

几天前,我被迫使用以下结构进行课堂宣传:

@Table(name="UserPattern",  uniqueConstraints={
   @UniqueConstraint(columnNames={"user_id", "patern_id"})
})

我对这种语法感到非常惊讶。

通常我认为如果我应该将数组传递给注释O,我应该写下以下内容:

declared_inside_annotation_name={value1,value2...}

但在这种情况下,它看起来如下:

uniqueConstraints={
                    @UniqueConstraint(columnNames={"user_id", "patern_id"})
                  }

@Table注释声明:

@Target(TYPE)
@Retention(RUNTIME)
public @interface Table {

    String name() default "";


    String catalog() default "";


    String schema() default "";


    UniqueConstraint[] uniqueConstraints() default { };


    Index[] indexes() default {};
}

请澄清这种语法。

1 个答案:

答案 0 :(得分:1)

您的declared_inside_annotation_name示例中的预期语法与@Table注释的语法之间实际上没有冲突。注释的数组属性的元素类型不一定必须是字符串(可能是您所期望的)。它实际上可能是另一个注释。

uniqueConstraints注释的@Table属性就是这种情况。如果检查UniqueConstraint类的声明,您会发现它本身就是一个注释。将其写下来时,您可以使用通常的@AnnotationTypeName表示法。