注释类型元素的语法是什么?

时间:2018-11-22 18:09:18

标签: java

如何阅读/理解以下Java语句?

Class<?>[] groups() default {};

Class < ? extends Payload>[] payload() default {};

认为我可以单独理解它们,但是我不知道我是否对它的整体含义有很好的认识。

个人:

  1. Class<?>表示任何类,Class< ? extends Payload>表示扩展Payload类的任何类
  2. [ ]似乎是指任何类数组。正确吗?
  3. groups()payload()是方法名称。
  4. default{}在没有实现时使用它吗?

我真的不确定如何理解以上陈述吗?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:5)

  

默认{}->在没有实现时使用它吗?

在注释定义中,可以为参数指定默认值。默认后的{}是一个空数组的数组文字。您也可以将其设置为一些非空值。这也适用于其他对象。例如lombok的Data批注,其中声明了默认字符串:

public @interface Data {
    String staticConstructor() default "";
}
  

Class表示任何类别,“ Class <?扩展有效载荷>”表示任何类别   扩展了Payload类

  

[]->似乎是指任何类的数组。正确吗?

  

groups()和payload()是方法名称。

它们是注释声明中使用的参数的名称,以及这些值的getter方法的名称。例如,您可以定义:

@Data(staticConstructor = "of") class Foobar {}

然后您可以使用创建的getter方法获取值:

Data dataAnnotation = Foobar.class.getAnnotation(Data.class);
String staticConstructor = dataAnnotation.staticConstructor();

请注意,除非注释定义也用@Retention(RetentionPolicy.RUNTIME)注释,否则您实际上将无法在运行时检索注释的值。