Kotlin中如何解析类型为Any的变量的实际类型?
Kotlin中解析Map值的实际类型并调用指定函数
当然可以通过Kotlin的类型检查与智能转换来解析Any类型value的实际类型,从而安全调用只接受String、Int、Double的sendItem()函数。
核心思路是用when表达式分支匹配不同类型,Kotlin会自动完成智能转换,不需要显式强转。修改后的代码如下:
private fun mapToItems(map: Map<String, Any>?) { map?.forEach { key, value -> when (value) { is String -> sendItem(key, value) is Int -> sendItem(key, value) is Double -> sendItem(key, value) // 可选:处理不支持的类型,比如打日志或抛异常 else -> println("Key $key 对应的value类型不支持:${value.javaClass.name}") } } } // 对应sendItem的重载函数示例 fun sendItem(key: String, value: String) { /* 实现逻辑 */ } fun sendItem(key: String, value: Int) { /* 实现逻辑 */ } fun sendItem(key: String, value: Double) { /* 实现逻辑 */ }
几点说明:
- 智能转换:当用
is判断类型后,Kotlin会自动将value转换为对应类型,直接传入sendItem即可,无需手动强转。 - 处理装箱类型:如果map里的数字是Java装箱类型(比如
Integer、Double),Kotlin的is Int/is Double依然能识别,不需要额外处理。 - 异常情况:如果存在不支持的类型,可以在
else分支里做自定义处理,比如忽略、打印警告或者抛出IllegalArgumentException。
内容的提问来源于stack exchange,提问作者Wafi_ck
相关产品推荐
相关产品推荐

