Некорректная работа companion object во вложенном классе
Несколько дней назад написал код, который вызвал у меня двухчасовой ступор - в null - безопасном Kotlin null появлялся там, где его никак не могло быть. В итоге источник проблемы был найден, решение однострочное. Однако. Я уверен, что текущее поведение программы некорректно.
Минимальный пример:
fun main(args: Array<String>) {
println(Outer().outersGetProperty)
println(Outer.outersCompanion)
println(Outer.Inner.innersCompanion)
}
class Outer {
val outersGetProperty: List<Inner>
get() = Inner.innersCompanion
companion object {
val outersCompanion: List<Inner> = listOf(Inner.First, Inner.Second)
}
open class Inner {
object First : Inner()
object Second : Inner()
companion object {
val innersCompanion: List<Inner> = listOf(First, Second)
//val innersCompanion: List<Inner> by lazy { listOf(First, Second) } //полностью рабочий вариант, который я использую сейчас
}
}
}
Вывод данного кода:
[null, Outer$Inner$Second@179d3b25]
[Outer$Inner$First@254989ff, Outer$Inner$Second@179d3b25]
[null, Outer$Inner$Second@179d3b25]
В коде жестко указан тип, гарантирующий отсутствие null, и тем не менее null там есть!
Вполне возможно, моих знаний просто недостаточно, чтобы понять, что именно вызывает такое поведение, но даже если этому есть технически обоснованное объяснение и иначе сделать просто нельзя, то о таких вещах просто обязана предупреждать студия!
Прошу поделиться опытом, объяснить, чем вызвано такое поведение, может еще кто-то сталкивался.
P.s. Код изначально писался в AndroidStudio, к минимальному примеру приводился в Intellij IDEA 2020.1. Обе ide не выдали ни варнингов, ни предупреждений, хотя должны бы, потому они в тегах.
Kotlin plugin в IDEA версии 1.3.72-release-IJ2020.1-1.