Kotlin:使用扩展运算符将数组传递给varargs方法

时间:2017-07-10 20:13:43

标签: kotlin dagger-2 android-room

我花了很长时间试图找出如何将一些Migration实例传递给Dagger2模块的Room数据库构建器。

会议室数据库构建器需要上下文和数据库名称。

Room.databaseBuilder(context, Database::class.java, dbName)
                .build()

可以使用addMigrations方法将迁移添加到构建器,该方法需要vararg migrations: Migration!

一种选择是创建构建器。

val builder = Room.databaseBuilder(context, Database::class.java, dbName)

然后通过迁移进行每次

migrations.forEach { builder.addMigrations(it) }
然而,这很麻烦且不必要,应该使用扩展运算符。

我设法错过了这个,因为我为扩展运算符找到的唯一文档是文档中的一个句子。

  

当我们调用vararg函数时,我们可以逐个传递参数,例如: asList(1,2,3),或者,如果我们已经有一个数组并希望将其内容传递给函数,我们使用扩展运算符(数组前缀为*)

1 个答案:

答案 0 :(得分:3)

为了将数组传递给函数。该数组只需要以星号*为前缀。

val migrations: Array<Migration>
Room.databaseBuilder(context, Database::class.java, dbName)
                .addMigrations(*migrations)
                .build()

一般来说,如果我们有

fun foo(vararg things: Type) {
    //Do something with the things
}

我们可以使用fooarrayOf致电Array

foo(*Array(n, { it.toType()}))
foo(*arrayOf(instance1, instance2, instance3))
val array = Array<Type>(n, {it.toType()})
foo(*array)