Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin:使用扩展运算符将数组传递给varargs方法_Kotlin_Dagger 2_Android Room - Fatal编程技术网

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

Kotlin:使用扩展运算符将数组传递给varargs方法,kotlin,dagger-2,android-room,Kotlin,Dagger 2,Android Room,我花了太长时间试图解决如何将大量的迁移实例传递到一个房间数据库生成器以用于Dagger2模块 房间数据库生成器需要上下文和数据库名称 Room.databaseBuilder(context, Database::class.java, dbName) .build() 可以使用addMigrations方法将迁移添加到构建器中,该方法采用vararg Migrations:Migration 一个选项是创建生成器 val builder = Room.data

我花了太长时间试图解决如何将大量的
迁移
实例传递到一个
房间
数据库生成器以用于Dagger2模块

房间数据库生成器需要上下文和数据库名称

Room.databaseBuilder(context, Database::class.java, dbName)
                .build()
可以使用
addMigrations
方法将迁移添加到构建器中,该方法采用
vararg Migrations:Migration

一个选项是创建生成器

val builder = Room.databaseBuilder(context, Database::class.java, dbName)
然后forEach完成迁移

migrations.forEach { builder.addMigrations(it) }
然而,这是混乱和不必要的,应该改用扩展运算符

我设法错过了这一点,因为我为spread operator找到的唯一文档是文档中的一句话

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


以便将数组传递给函数。该数组只需加上星号
*

val migrations: Array<Migration>
Room.databaseBuilder(context, Database::class.java, dbName)
                .addMigrations(*migrations)
                .build()
我们可以使用
arrayOf
数组调用
foo

foo(*Array(n, { it.toType()}))
foo(*arrayOf(instance1, instance2, instance3))
val array = Array<Type>(n, {it.toType()})
foo(*array)
foo(*数组(n,{it.toType()}))
foo(*arrayOf(实例1、实例2、实例3))
val数组=数组(n,{it.toType()})
foo(*数组)

已经提到的文件,包括排列操作员和操作员。所以在这里发布是没有必要的。我看到了第二个链接。我一直在寻找的,最初没有看到的,是这样一种解释,解释价差在做什么,而不仅仅是说“在你的论点之前加一个星号”。我还想知道是否有特殊的原因需要使用操作符,而不是自动传播传递给vararg方法的任何数组。您好,在第二个链接的底部有一个关于
asList
的演示。:)我确实看到了。考虑到使用该运算符的原因,我假设如果我有
vararg things:Any
并向其传递一个数组,则不清楚该数组是单个参数,还是数组内容是单个参数,这就是需要显式
*
运算符的原因。谢谢您的帮助。您好,
asList
函数签名已经告诉您,它将把所有数组元素逐个扩散到参数中。简言之:
arrayOf(1,*arrayOf(2),3)
相当于
arrayOf(1,2,3)
。您的实际问题可能是什么?
foo(*Array(n, { it.toType()}))
foo(*arrayOf(instance1, instance2, instance3))
val array = Array<Type>(n, {it.toType()})
foo(*array)