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
对象被调试器设置了两次。