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)