Kotlin lazy var throw ClassCastException:kotlin.UNINITIALIZED_VALUE

时间:2017-12-04 17:08:54

标签: kotlin

我已经用这个脱掉了舞台!我在Kotlin数据类中声明了一个lazy var。它是一个布尔值,根据类中的其他字段计算它的值。

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

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

在我的情况下似乎正在发生的事情是,在创建延迟变量期间创建UNINITALIZED_VALUE对象并将其赋值给目标这么好。但是,当我试图以不可思议的方式检索值时,UNITIALIZED_VALUE对象以某种方式设置为与最初存储在_value字段中的对象值不同的对象值,因此比较失败,延迟实现认为该值已经设置,因此尝试将UNINITIALIZED_VALUE对象转换为Boolean并繁荣!例外!

真正奇怪的是,我是团队中唯一遇到此问题的人 - 我已删除并重新安装了所有内容--Android Studio,完整的git clone,gradle缓存,模拟器。我无法想到其他任何事情,我无法看到UNINITIALIZED_VALUE对象被调试器设置两次。

0 个答案:

没有答案