Kotlin Data类初始化未遵循传参顺序导致参数赋值错误问题咨询
问题结论
该情况不属于Kotlin的预期行为,Kotlin调用构造函数传入位置参数时,会严格按照构造函数定义的参数顺序一一赋值,出现参数错位本质是运行的编译产物、导入的类定义和你当前查看的源码不匹配导致的。
常见原因
- 构建缓存未清理:你修改过
PersonalSignMessage的参数顺序后,没有清理旧的构建缓存,实际运行的字节码还是旧版本的构造函数参数顺序,位置参数就会出现错位。而显式指定参数名时,Kotlin会按照参数名匹配而非位置匹配,所以不受参数顺序变更的影响。 - 导入类错误:项目中存在多个同名的
PersonalSignMessage类,你调用构造函数时导入的是其他包下、参数顺序为(id: Long, address: String, message: String)的同名类,和你当前查看的类定义不一致。显式指定参数名时只要参数名匹配就能正确赋值,所以运行正常。 - IDE 与运行版本不一致:你本地修改了类定义但未同步构建,调试时IDE展示的是本地最新的源码,实际运行的是旧版本的编译产物,导致你观察到参数错位的现象。
排查方案
- 完全清理构建缓存后重新编译:如果用Gradle构建可以先执行
./gradlew clean,IDE端可以执行「Invalidate Caches / Restart」后再全量构建项目,验证问题是否复现。 - 检查构造函数调用处的类导入路径,确认和你定义的目标
PersonalSignMessage类的包路径完全一致,排除导错类的情况。 - 检查
PersonalSignMessage类是否存在其他重载构造函数,或者有基于位置参数的扩展构造方法,避免调用到非预期的构造实现。
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

