首页 文章

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

提问于
浏览
1

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

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),或者,如果我们已经有一个数组并希望将其内容传递给函数,我们使用spread运算符(数组前缀为*)

1 回答

  • 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
    }
    

    我们可以使用 arrayOfArray 调用 foo .

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

相关问题