我花了很长时间试图找出如何将一些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),或者,如果我们已经有一个数组并希望将其内容传递给函数,我们使用扩展运算符(数组前缀为*)
答案 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
}
我们可以使用foo
或arrayOf
致电Array
。
foo(*Array(n, { it.toType()}))
foo(*arrayOf(instance1, instance2, instance3))
val array = Array<Type>(n, {it.toType()})
foo(*array)