如何使用Kotlin的when语句对空数组进行模式匹配?
Kotlin中空数组的匹配方式
首先明确:Kotlin不支持直接用[]字面量在when表达式中作为匹配模式来判断空数组。你写的示例代码里,[]会被编译器当成创建新空数组的表达式,而不是匹配条件,这样的写法会直接报错。
想要判断数组是否为空,有两种更可靠的方式:
1. 直接调用isEmpty()方法(推荐)
这是最直观、最通用的方式,不需要依赖任何内部实现细节:
val a: Array<Int> = ... when { a.isEmpty() -> println("empty") else -> println("not empty") }
也可以简化成更简洁的if-else写法:
if (a.isEmpty()) println("empty") else println("not empty")
2. 匹配emptyArray()实例(不推荐)
Kotlin的emptyArray<T>()方法会缓存同一类型的空数组实例,所以理论上可以通过引用相等来匹配:
val a: Array<Int> = ... when (a) { emptyArray<Int>() -> println("empty") else -> println("not empty") }
但这种方式不推荐,因为它依赖于Kotlin标准库对emptyArray()的缓存实现——虽然当前版本确实会缓存,但这种实现细节未来可能变化,而且写法也不如isEmpty()清晰易懂。
另外补充:如果是List类型,Kotlin同样不能用[]字面量匹配空列表,但可以用emptyList()(因为emptyList()是全局单例),不过调用isEmpty()仍然是更稳妥的选择。
内容的提问来源于stack exchange,提问作者pygumby
相关产品推荐
相关产品推荐

