Kotlin类型不匹配问题:如何将OldObject列表转为HashObject?
Kotlin类型不匹配问题解决:OldObject列表转HashObject
我正在学习Kotlin,尝试将多个各自管理两个Int值的OldObject对象转换为一个包含HashMap<Int, Int>列表的HashObject对象。
新对象定义:
public class HashObject(val maps: MutableList<HashMap<Int, Int>>){ ... }
旧对象定义:
public class OldObject( val a: Int, val b: Int )
我拥有一个OldObject对象列表:
val oldObjects: List<OldObject> = ...
尝试的转换代码:
val hashObjects = mutableListOf<HashMap<Int, Int>>() for(obj in oldObjects){ hashObjects.add(hashMapOf(obj.a to obj.b)) val result = HashObject(maps = hashObjects)
出现的错误:
Type mismatch. Required: kotlin.collections.HashMap<Int, Int> /* = java.util.HashMap<Int, Int> */ Found: MutableList<java.util.HashMap<Int, Int>>
问题原因与修复
你的核心转换逻辑是正确的,但存在语法错误:for循环缺少闭合的大括号},导致编译器解析混乱,误报类型不匹配。
修复后的代码:
val hashObjects = mutableListOf<HashMap<Int, Int>>() for(obj in oldObjects){ hashObjects.add(hashMapOf(obj.a to obj.b)) } // 补上闭合大括号 val result = HashObject(maps = hashObjects)
更简洁的Kotlin风格写法
可以用map函数替代手动循环,代码更简洁易读:
// 将每个OldObject转换为HashMap,再转成MutableList val hashMaps = oldObjects.map { hashMapOf(it.a to it.b) }.toMutableList() val result = HashObject(maps = hashMaps)
如果HashObject的构造参数允许接收List<HashMap<Int, Int>>而非必须MutableList,还可以省略toMutableList()进一步简化:
val hashMaps = oldObjects.map { hashMapOf(it.a to it.b) } val result = HashObject(maps = hashMaps)
内容的提问来源于stack exchange,提问作者Ajipani
相关产品推荐
相关产品推荐

