2016-12-16 32 views
7

假设我们有一个Java注解如下:注解:当arrayOf需要

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

在科特林允许我如下使用译注:

@Hans(value = "test") 

只要我改变从'value'到'name'的属性名称不能再使用这个语法,而是我需要有arrayOf(..)。

@Hans(name = arrayOf("test")) 

这是一个错误或设计决定,如果是的话,它是什么原因。

提前 种类非常感谢认为

回答

7

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

+0

非常感谢您的解释/时间 –