kotlin内联(inline)函数中参数默认值报VerifyError: Bad local variable type错误的解决办法

Posted XeonYu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了kotlin内联(inline)函数中参数默认值报VerifyError: Bad local variable type错误的解决办法相关的知识,希望对你有一定的参考价值。

在使用kotlin开发后端项目的时候遇见了个比较奇怪的报错,这个错android中可能也会遇到吧。

表现形式为 内联函数中的参数有默认值的话,会报一个校验异常(错误的局部变量类型)的异常,编译时是ok的,运行时加载类的时候就会出现这个报错

大致报错如下

VerifyError: Bad local variable type

比较奇怪的是同样的代码本地和生产都没问题,但是线上的测试环境就会报这个错误。
看了下反编译后的Java代码也没找出有啥问题,也花了不少时间去尝试解决,一下两种办法可以解决这个报错

  1. 去掉inline,使用普通函数
  2. 继续使用inline,但是要把参数默认值给去掉

以上两种采取任意一种方式都不会再报错了,但是具体什么原因导致的还是没找到。
去jetbrains官方找了下也有人遇到了类似的问题,但是也没有找出具体原因,只是猜测可能跟kotlin的版本有关系。
参考链接:https://youtrack.jetbrains.com/issue/KT-46105/VerifyError-Bad-local-variable-type-with-inline-function-with-de
按照我所碰见的情况确实只能猜测跟运行环境有关了,毕竟同样的代码本地跑和线上生产环境跑都是ok的。

做个记录吧,如果你也遇到了这样的问题可以参考一下上面的解决办法。
另外如果有大佬知道是什么原因导致的,还请评论区指点一下,感谢!

以上是关于kotlin内联(inline)函数中参数默认值报VerifyError: Bad local variable type错误的解决办法的主要内容,如果未能解决你的问题,请参考以下文章

kotlin内联(inline)函数中参数默认值报VerifyError: Bad local variable type错误的解决办法

Kotlin inline 内联函数

一次性搞懂Kotlin的内联函数--inline,noinline和crossinline

一次性搞懂Kotlin的内联函数--inline,noinline和crossinline

Kotlin:你必须要知道的 inline-noinline-crossinline

Kotlin Inline 的原理和注意点