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
相关产品推荐
相关产品推荐

