Kotlin vararg 关键字
最后修改于 2025 年 4 月 19 日
Kotlin 的 vararg
关键字允许函数接受相同类型的可变数量的参数。本教程通过实际示例深入探讨了 vararg
关键字。
基本定义
Kotlin 中的 vararg
关键字代表“可变参数”。它使函数能够接受任意数量的指定类型的参数。这些参数在函数体中被视为一个数组。
基本 vararg 函数
vararg
的最简单用法是创建一个可以接受多个相同类型参数的函数。在函数内部,这些参数作为数组可用。
package com.zetcode fun printNumbers(vararg numbers: Int) { for (number in numbers) { println(number) } } fun main() { printNumbers(1, 2, 3, 4, 5) }
此示例显示了一个接受任意数量 Int 参数的函数。vararg
参数 numbers
在函数内部被视为一个 Int 数组。我们在调用它时可以传递任意数量的整数。
vararg 与其他参数
一个函数可以同时具有常规参数和 vararg
参数。除非后面是 lambda 参数,否则 vararg
参数通常是最后一个参数。
package com.zetcode fun greet(prefix: String, vararg names: String) { for (name in names) { println("$prefix $name") } } fun main() { greet("Hello", "John", "Jane", "Bob") }
在这里,我们有一个带有常规 String 参数和一个 vararg
String 参数的函数。该函数使用前缀打印每个名称。请注意 vararg
参数是如何出现在常规参数之后的。
vararg 的展开运算符
当您有一个数组并且想要将其元素作为单独的参数传递给 vararg
函数时,请使用展开运算符 (*
)。
package com.zetcode fun sumNumbers(vararg numbers: Int): Int { return numbers.sum() } fun main() { val nums = intArrayOf(1, 2, 3, 4, 5) val total = sumNumbers(*nums) println(total) // Output: 15 }
此示例演示了如何使用展开运算符将数组传递给 vararg
函数。*nums
语法将数组解包为函数可以处理的单个元素。
多个 vararg 参数
一个函数只能有一个 vararg
参数。尝试声明多个 vararg
参数将导致编译错误。
package com.zetcode // This won't compile - only one vararg parameter allowed // fun invalid(vararg first: Int, vararg second: Int) {} fun valid(vararg numbers: Int, message: String) { println("$message: ${numbers.joinToString()}") } fun main() { valid(1, 2, 3, message = "Numbers") }
注释的函数显示了声明多个 vararg
参数的无效尝试。有效的示例显示了一个具有一个 vararg
参数和常规命名参数的有效函数。
不同类型的 vararg
虽然 vararg
参数必须是相同的类型,但您可以使用 Any
来接受不同的类型,尽管这并非类型安全的。
package com.zetcode fun printAll(vararg items: Any) { for (item in items) { println(item) } } fun main() { printAll("Hello", 42, 3.14, true) }
此函数通过使用 Any
作为 vararg
类型来接受任何类型的参数。虽然具有灵活性,但这种方法会失去类型安全性,应谨慎使用。
构造函数中的 vararg
vararg
关键字也可以在类构造函数中使用,允许使用可变参数创建对象。
package com.zetcode class ShoppingCart(vararg items: String) { private val cartItems = items.toList() fun showItems() { println("Cart contains: ${cartItems.joinToString()}") } } fun main() { val cart = ShoppingCart("Apple", "Banana", "Orange") cart.showItems() }
此示例演示了一个带有 vararg
构造函数参数的类。构造函数接受任意数量的 String 参数,然后这些参数作为列表存储在类中。
vararg 与默认参数
Kotlin 允许将 vararg
与默认参数结合使用,从而在函数调用中提供灵活性。
package com.zetcode fun createGreeting( vararg names: String, greeting: String = "Hello" ) { for (name in names) { println("$greeting, $name!") } } fun main() { createGreeting("John", "Jane") // Uses default greeting createGreeting("Bob", greeting = "Hi") // Custom greeting }
此函数将 vararg
参数与默认参数结合使用。第一个调用使用默认的问候语,而第二个调用指定了自定义的问候语。请注意问候语参数的命名参数语法。
vararg 的最佳实践
- 仔细定位: 将
vararg
参数放在最后或 lambda 参数之前。 - 使用有意义的名称: 清楚地命名您的
vararg
参数以表明其用途。 - 考虑数组转换: 记住
vararg
参数是函数内部的数组。 - 使用展开运算符: 使用展开运算符 (
*
) 将数组传递给vararg
函数。 - 避免过度使用: 当固定数量的参数更清晰时,请勿使用
vararg
。
来源
本教程深入介绍了 Kotlin 的 vararg
关键字,展示了如何创建接受可变数量参数的灵活函数。我们探讨了各种场景,包括混合参数、使用展开运算符以及在构造函数中应用 vararg
。
作者
列出 所有 Kotlin 教程。