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

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

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

在我的情况下似乎正在发生的事情是 UNINITALIZED_VALUE 对象正在创建并在惰性var创建期间分配给该值 - 到目前为止一直很好 . 但是,当我试图以不可思议的方式检索该值时, UNITIALIZED_VALUE 对象以某种方式被设置为与最初存储在 _value 字段中的对象不同的对象值,因此比较失败,延迟实现认为该值已设置,因此试图将 UNINITIALIZED_VALUE 对象转换为 Boolean 并繁荣!例外!

什么's really weird is that I am the only person in the team experiencing this issue - I have deleted and reinstalled everything - Android Studio, full git clone, gradle cache, emulators. I can' t想到其他任何东西,我无法看到 UNINITIALIZED_VALUE 对象被调试器设置两次 .