如何将可变参数转换为列表?
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())
}
我有一个带有 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())
}