Kotlin数据类用listOf默认值时查看字节码报JVM后端错误如何解决
Kotlin字节码查看工具报错原因及解决方案
错误产生原因
- 该问题是Kotlin IDE插件的已知编译后端bug,仅在Kotlin多平台项目的
commonMain公共源集下触发 - 你代码中使用的无参
listOf()是标准库中标记了@InlineOnly的内联函数,该类函数不会生成独立的JVM方法实现,调用时会直接内联展开 - IDE的单文件字节码生成逻辑无法正确识别公共源集中内联函数作为构造参数默认值的场景,找不到对应函数的实现类信息,因此抛出
No implClassName异常。
可行解决方案
可以任选以下一种方式规避问题:
- 替换默认值写法:将
val orders: List<Order> = listOf()替换为val orders: List<Order> = emptyList(),二者返回结果完全一致,且不会触发该bug - 升级工具版本:升级IntelliJ IDEA以及Kotlin插件到1.7.0及以上版本,该bug在后续版本中已经被官方修复
- 调整查看方式:不要使用单文件字节码查看功能,待整个common模块全量编译完成后,直接从编译输出的class文件中查看对应字节码
- 临时规避:如果仅需临时查看字节码,可以先注释掉
listOf()默认值的行,查看完成后恢复代码即可。
内容的提问来源于stack exchange,提问作者Chandra Sekhar
相关产品推荐
相关产品推荐

