Kotlin中when语句如何传入多参数同时匹配Vehicle的name和region属性
错误原因
你编写的代码触发类型错误是因为||是Kotlin中的逻辑或运算符,仅支持左右两侧为布尔类型的表达式,你传入的newVehicle.name和newVehicle.region均为String类型,不符合运算符要求,所以会抛出Type mismatch: inferred type is String but Boolean was expected的错误。
方案1:Pair包装多属性传入when(推荐,适合属性组合匹配场景)
Kotlin的when支持传入任意类型的表达式,你可以将需要匹配的多个属性包装为Pair对象,即可同时匹配多个属性的取值:
data class Vehicle(val name: String, val category: String,val subCategory: String, val region: String) fun main() { val newVehicle = Vehicle("Mitsubishi","Saloon", "Mini", "Kenya") val newVehicle2 = Vehicle("Mitsubishi 2","Saloon 2", "Mini 2", "Kenya 2") // 用to语法糖构造Pair,传入两个需要匹配的属性 when(newVehicle.name to newVehicle.region) { // 同时匹配两个属性的固定组合 "Mitsubishi 2" to "Kenya 2" -> print("name为Mitsubishi 2且region为Kenya 2") "Mitsubishi" to "Kenya" -> print("name为Mitsubishi且region为Kenya") // 用通配符_忽略某个属性的匹配,只校验单个属性 "Mitsubishi" to _ -> print("仅name为Mitsubishi即可匹配,忽略region取值") _ to "Kenya" -> print("仅region为Kenya即可匹配,忽略name取值") } }
如果需要匹配三个及以上的属性,你可以用Triple或者自定义data类包装属性即可。
方案2:无参数when(适合灵活的多条件判断场景)
如果你不需要匹配属性组合,只需要多个属性任意一个满足条件就命中分支,可以直接使用不带参数的when写法:
data class Vehicle(val name: String, val category: String,val subCategory: String, val region: String) fun main() { val newVehicle = Vehicle("Mitsubishi","Saloon", "Mini", "Kenya") val newVehicle2 = Vehicle("Mitsubishi 2","Saloon 2", "Mini 2", "Kenya 2") when { newVehicle.name == "Mitsubishi 2" || newVehicle.region == "Kenya 2" -> print("name为Mitsubishi 2或region为Kenya 2") newVehicle.name == "Mitsubishi" || newVehicle.region == "Kenya" -> print("name为Mitsubishi或region为Kenya") } }
内容的提问来源于stack exchange,提问作者Vicki Mes
相关产品推荐
相关产品推荐

