如何让Kotlin的vararg参数至少接收一个实参?
让Kotlin的vararg函数强制接收至少一个实参
有两种可行的处理方式,推荐优先使用编译时校验的方案:
方案一:拆分参数(编译时强制校验)
将第一个参数单独声明,剩余可选参数用vararg修饰,编译器会直接强制要求调用时至少传入第一个参数:
fun qwer(first: String, vararg rest: String) { // 如需合并所有参数,可直接拼接成列表使用 val allArgs = listOf(first) + rest } fun main() { qwer("hello") // 合法调用 qwer("hello", "world", "foo") // 合法调用 // qwer() // 编译报错,必须传入至少一个参数 }
这种方式能在编译阶段就拦截非法调用,是最安全且符合Kotlin设计习惯的方案。
方案二:运行时参数校验
如果不想修改函数签名,可以在函数内部通过require做运行时检查,但这种方式只能在运行时抛出错误,无法提前在编译阶段拦截:
fun qwer(vararg x: String) { require(x.isNotEmpty()) { "必须传入至少一个字符串参数" } // 后续业务逻辑 } fun main() { qwer() // 运行时抛出IllegalArgumentException qwer("test") // 正常执行 }
内容的提问来源于stack exchange,提问作者VanechikSpace
相关产品推荐
相关产品推荐

