Kotlin lazy var throwing ClassCastException: kotlin.UNINITIALIZED_VALUE

Я добрался до этой сцены! У меня есть ленивый var, объявленный в классе данных Kotlin. Он является логическим и вычисляет его значение на основе других полей в классе.

Способ работы Lazy.kt заключается в создании анонимного объекта с именем UNINITIALIZED_VALUE для использования в качестве основы для определения того, был ли инициализирован ленивый var. Каждый ленивый экземпляр var будет иметь свой собственный уникальный экземпляр UNINITIALIZED_VALUE . Этот объект хранится в поле _value объекта Lazy.

Когда доступ к значению lazy var выполняется, выполняется проверка того, соответствует ли текущее значение UNINITIALIZED_VALUE , проводя сравнительное сравнение. Если нет, то инициализатор вызывается для создания значения, которое хранится в ленивом поле var _value .

То, что, по-видимому, происходит в моем случае, заключается в том, что объект UNINITALIZED_VALUE создается и присваивается значению во время ленивого создания var – пока это так хорошо. Однако, когда я пытаюсь извлечь значение, необъяснимо, объект UNITIALIZED_VALUE каким-то образом был установлен на другое значение объекта, которое было первоначально сохранено в поле _value и поэтому сравнение не выполняется, ленивая реализация считает, что значение установлено и так попытки UNINITIALIZED_VALUE объект UNINITIALIZED_VALUE в Boolean и бум! Исключение!

Что действительно странно, так это то, что я единственный человек в команде, испытывающий эту проблему – я удалил и переустановил все – Android Studio, полный клон git, кегель градиента, эмуляторы. Я не могу думать ни о чем другом и не могу видеть, что объект UNINITIALIZED_VALUE устанавливается дважды с помощью отладчика.