如何将可变参数转换为列表?

How to convert vararg to list?

我有一个带有 vararg 参数的函数。此可变参数需要作为列表传递给另一个函数。

如何将 vararg 参数转换为列表? listOf() 给我一个错误。

fun insertMissingEntities(vararg entities: Entity) {
  val list = listOf(entities)
  passMissingEntities(list) // Type mismatch. 
                            // Required: List<Entity>
                            // Found: List<Array<out Entity>>
}

vararg 参数需要使用扩展 * 运算符进行扩展。

fun insertMissingEntities(vararg entities: Entity) {
  val list = listOf(*entities)
  passMissingEntities(list)
}

Koltin (varang a:Entity) ~= Java (a:Entity ...一)

这意味着您可以传递 实体类型 的多个参数,而不是整个 array/list

当我们调用可变参数函数时,我们可以一个一个地传递参数,例如asList(1, 2, 3),或者,如果我们已经有一个数组并想将其内容传递给函数,我们使用展开运算符。 (数组前缀为 *):

    fun insertMissingEntities(vararg entities: Entity) {
      val list = listOf(entities)  // Here entities is already a list of entity so you are doing listOf(listOf(entity)).. Hence , the error

//passMissingEntities(list) -> WRONG// Type mismatch. 
                                    // Required: List<Entity>
                                    // Found: List<Array<out Entity>>


 passMissingEntities(entities) // Just pass the entities instead of converting it to list again
    }

另请阅读:https://kotlinlang.org/docs/reference/functions.html#variable-number-of-arguments-varargs

您可以使用扩展函数 .asList(),它不添加复制(不像 listOf 使用扩展运算符)。

fun insertMissingEntities(vararg entities: Entity) {
  passMissingEntities(entities.asList())
}