我已经用这个脱掉了舞台!我在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
对象被调试器设置两次。