注释:何时需要arrayOf

Raf*_*mid 7 kotlin

假设我们有一个Java注释如下:

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Hans {
    String[] value() default {};
}
Run Code Online (Sandbox Code Playgroud)

在Kotlin中,我可以使用Annotation如下:

@Hans(value = "test")
Run Code Online (Sandbox Code Playgroud)

只要我将属性名称从'value'更改为'name',就不允许再使用此语法,而是需要使用arrayOf(..).

@Hans(name = arrayOf("test"))
Run Code Online (Sandbox Code Playgroud)

这是一个错误或设计决定,如果是这样的原因是什么原因.

非常感谢提前亲切的问候

yol*_*ole 7

不,这不是一个错误.Java value特别处理注释,并允许在使用时省略注释参数名称.Kotlin遵循这种特殊处理方式,并允许您省略参数名称,允许您编写@Hans("test").支持数组参数的这种语法需要将参数视为vararg,因此Kotlin会这样做,并允许您省略arrayOf.