向Mutable List添加元素时按引用传递的问题及值传递实现咨询
问题分析与解决方案
错误原因
ProductionData是引用类型,你在循环外部仅创建了一个production实例。每次循环只是修改这个实例的timeDetail属性,再将同一个实例的引用添加到列表中。这意味着列表里的所有元素本质上都指向同一个对象,修改该对象的属性时,列表中所有元素的对应属性都会同步变化。
解决方法
核心是保证每次添加到列表的是独立的新对象实例,而非同一个对象的引用,有两种常用实现方式:
方式1:循环内部创建新实例
每次循环都新建ProductionData对象,再赋值表头和详情数据:
val productionList = mutableListOf<ProductionData>() for (item in detailData) { // 每次循环创建全新的ProductionData实例 val production = ProductionData() production.dateHeader = headerData.date production.timeHeader = headerData.time production.timeDetail = item.timeDetail productionList.add(production) }
方式2:利用对象复制(适用于Data Class)
如果ProductionData是Kotlin的data class,它会自动生成copy()方法,可以先创建包含表头数据的基础实例,每次循环复制并修改详情字段:
val productionList = mutableListOf<ProductionData>() // 先创建包含表头数据的基础实例 val baseProduction = ProductionData( dateHeader = headerData.date, timeHeader = headerData.time ) for (item in detailData) { // 复制基础实例,仅修改timeDetail字段 val production = baseProduction.copy(timeDetail = item.timeDetail) productionList.add(production) }
内容的提问来源于stack exchange,提问作者Leonel Fusco
相关产品推荐
相关产品推荐

