Почему имя является нулевым в базовом классе - PullRequest
0 голосов
/ 02 мая 2020
open class Base( open val name : String){
    init {
        println("initializing base with name = $name")
    }
    open val size : Int = name.length.also {
        println("Initializing size in base with $it")
    }
}
class Derived constructor(override val name: String, val lastName : String) : Base(name){
    override val size : Int = (name.length + lastName.length).also {
        println("Initialzing derived size with $it")
    }
}
fun main(){
    val derived = Derived("Tarun", "Chawla")
    var base : Base = derived
    println(base.size)
}

При запуске выдается исключение NULL, и kotlin не видит его.

Exception in thread "main" java.lang.NullPointerException
    at Base.<init>(main.kt:5)
    at Derived.<init>(main.kt:9)
    at MainKt.main(main.kt:15)
    at MainKt.main(main.kt)

Сначала я не могу понять причину, по которой имя является нулевым в базовом классе, и как это обошло kotlin.

1 Ответ

0 голосов
/ 04 мая 2020

Таким образом, ответ заключается в том, что объект базового класса находится в несогласованном состоянии, поскольку вы переопределили его в подклассе, который еще не инициализирован.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...