Java到Kotlin Array的转换,为什么在不同的情况下有所不同?

时间:2019-03-21 00:46:50

标签: kotlin

场景1 当我从Java到Kotlin将Dagger模块注释如下时

@Module(includes = {AModule.class, XModule.class})

它变为

@Module(includes = [AModule::class, XModule::class])

方案2 但是当我转换下面的

Class<?>[] classArray = {AModule.class, XModule.class};

它更改为

val classArray = arrayOf(AModule::class.java, XModule::class.java)

问题 在上述两种情况下,{AModule.class, XModule.class}的转换为何不同,一种情况是使用[],另一种情况是使用arrayOf

1 个答案:

答案 0 :(得分:3)

自Kotlin 1.2起,您可以在注释中使用数组文字。这些不是实际的Kotlin语法的一部分,仅保留用于注释。将来可能会有所改变,但是当前您无法在实际代码中使用数组文字。

了解注释here

  

对于其他具有数组类型的参数,您需要使用数组   文字语法(自Kotlin 1.2起)或arrayOf(...):

     

// Java

false
     

// Kotlin 1.2 +:

public @interface AnnWithArrayMethod {

    String[] names();

}
     

//较旧的Kotlin版本:

@AnnWithArrayMethod(names = ["abc", "foo", "bar"]) 
class C