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

Kotlin中copy函数标红无法接收任何传入参数值问题

Kotlin data class copy方法传参报红解决

问题场景

实现mPerformDeletion删除逻辑时,copy函数调用处标红,无法传入任何参数,相关代码:

private fun mPerformDeletion() {
    when {
        state.mNumber2.isNotBlank() -> 
            state = state.copy(mNumber2 = state.mNumber2.dropLast(1))
    }
}

根因

带属性入参的copy()是Kotlin为data修饰的数据类自动生成的专属方法,非数据类不会生成对应签名的方法,常见触发场景:

  • state对应的类未添加data修饰符,属于普通类、接口、抽象类
  • 待修改的mNumber2属性未定义在data类的主构造函数中,而是声明在类体内部,自动生成的copy方法不会覆盖类体内的成员属性
  • 导入了无关的同名copy扩展函数,和当前State类的方法签名不匹配

修复步骤

  • 给State类添加data修饰符,将所有需要通过copy修改的属性全部放在主构造函数中,优先用val声明保证状态不可变:
// 错误写法
class CalculatorState {
    var mNumber2: String = "" // 类体内声明的属性不会被copy方法识别
}

// 正确写法
data class CalculatorState(
    val mNumber2: String = "", // 待修改属性放在主构造内
    // 其余状态属性
)
  • 检查文件顶部import语句,删除无关的copy方法导入,确保调用的是当前数据类自动生成的原生copy方法
  • 如果是Compose开发场景,确认State类没有被非data类继承,子类调用父类copy方法时无法传入子类自有属性,也会触发报红。

内容的提问来源于stack exchange,提问作者Saqib00786

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 00:09:30