Java 注释中用作单个值的数组元素

Java 注释中用作单个值的数组元素,java,compilation,annotations,Java,Compilation,Annotations,当我们在注释中声明数组并像这样使用它时会发生什么: @interface MyAnno { String[] names(); } @MyAnno(names="some value") class { ... } 尽管元素names被声明为字符串数组,但我们可以将其用作字符串,提供一个没有大括号的值。我想这是件好事,SuppressWarnings就是这样工作的,我只想知道当我们这样做时,内部会发生什么?编译器如何处理这个问题?它是用名为names的字符串替换names,还是在使用

当我们在注释中声明数组并像这样使用它时会发生什么:

@interface MyAnno {
    String[] names();
}

@MyAnno(names="some value")
class { ... }

尽管元素
names
被声明为字符串数组,但我们可以将其用作字符串,提供一个没有大括号的值。我想这是件好事,
SuppressWarnings
就是这样工作的,我只想知道当我们这样做时,内部会发生什么?编译器如何处理这个问题?它是用名为
names
的字符串替换
names
,还是在使用注释的地方应用
{}
?还有什么?

来自Java语言规范:

标识符=元素值


如果元素类型是数组类型,则不需要使用大括号来指定元素值对的元素值。如果元素值不是ElementValueArrayInitializer,则唯一元素为元素值的数组值与该元素关联


这是语法上的甜点——你得到一个只有一个元素的数组。

“如果元素值不是ElementValueArrayInitializer,那么一个数组值(其唯一元素是元素值)就会与该元素相关联”,所以就是这样。