Kotlin:将数组传递给可扩展运算符的可变参数方法
我花了太长时间试图研究如何将一些Migration
实例传递给Dagger2模块的Room
数据库生成器。
Room数据库生成器需要上下文和数据库名称。
Room.databaseBuilder(context, Database::class.java, dbName) .build()
迁移可以通过使用vararg migrations: Migration!
的addMigrations
方法添加到构建器中vararg migrations: Migration!
一种选择是创建构建器。
val builder = Room.databaseBuilder(context, Database::class.java, dbName)
然后通过迁移每个
migrations.forEach { builder.addMigrations(it) }
然而这是混乱和不必要的,应该使用扩展运算符。
我设法错过了这个,因为我发现的传播运算符的唯一文档是文档中的单个句子。
当我们调用可变参数函数的时候,我们可以逐个传递参数,比如asList(1,2,3),或者如果我们已经有一个数组并且想把它的内容传给函数,我们使用spread运算符(在数组前加*)
为了将数组传递给函数。 该数组只需要以星号*
作为前缀。
val migrations: Array<Migration> Room.databaseBuilder(context, Database::class.java, dbName) .addMigrations(*migrations) .build()
一般来说,如果我们有
fun foo(vararg things: Type) { //Do something with the things }
我们可以用arrayOf
或者Array
来调用foo
。
foo(*Array(n, { it.toType()})) foo(*arrayOf(instance1, instance2, instance3)) val array = Array<Type>(n, {it.toType()}) foo(*array)