场景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
?
答案 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