You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

向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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 14:40:49