Kotlin懒惰抛出ClassCastExceptionexception:kotlin.UNINITIALIZED_VALUE

我已经达到了这一个拉出舞台的头发! 我在Kotlin数据类中声明了一个懒惰的variables。 它是一个布尔值,根据类中的其他字段计算它的值。

Lazy.kt实现工作的方式是创建一个名为UNINITIALIZED_VALUE的匿名对象,以此作为确定是否已经初始化lazy var的基础。 每个lazy var实例都有自己唯一的UNINITIALIZED_VALUE实例。 该对象存储在Lazy对象的_value字段中。

当访问lazy var的值时,通过执行参考比较来检查当前值是否与UNINITIALIZED_VALUE相匹配。 如果不是,则初始化程序被调用以创建存储在lazy var _value字段中的值。

看起来在我的情况下发生的是UNINITALIZED_VALUE对象正在创建,并在懒惰var创建期间分配给值 – 到目前为止非常好。 然而,当我试图检索值,莫名其妙地, UNITIALIZED_VALUE对象已被设置为一个不同的对象的值,最初存储在_value字段,所以比较失败,懒惰的实现认为已设置的值,所以试图将UNINITIALIZED_VALUE对象转换为Boolean和繁荣! 例外!

真奇怪的是,我是团队中唯一遇到这个问题的人 – 我已经删除并重新安装了所有东西 – Android Studio,完整的git克隆,gradle缓存,模拟器。 我想不出任何其他的东西,并且无法看到UNINITIALIZED_VALUE对象被调试器设置了两次。