Kotlin 中非原始项的空指针异常。为什么?

问题描述 投票:0回答:1
open class Vehicle {    
    inner class Engine {
        var specs: String = ""
        constructor() {
            specs = getSpecs()
        }
    }
    val engine = Engine()
    open fun getSpecs(): String {
        return ""
    }
}
class Bike: Vehicle() {
    private val model: Model = Model("APACHE", "YAMAHA")
    private val year = 2024
    override fun getSpecs(): String {
        return "Model: ${model.company} - ${model.modelName}. Year: $year"
    }
}
data class Model(
    val modelName: String,
    val company: String
)

当我创建 Bike 类的对象时,上面的代码抛出空指针异常。

线程“main”中的异常java.lang.NullPointerException:不能 调用“Model.getCompany()”,因为“this.model”为 null

我确实明白为什么会调用异常。

我不明白的是,当我删除 getSpecs 方法中的 model.companymodel.modelName (当我不调用原始类型以外的任何类时)时,它工作正常。

我不知道为什么会发生这种情况,当我尝试获取年份变量时,它是否也应该抛出异常,因为它也没有初始化?

kotlin oop
1个回答
0
投票

超类构造函数在 Bike 构造函数之前调用。 Vehicule 在其构造函数中调用 getSpecs,该函数在 Bike 类中被重写,需要一个 Bike 类中尚不存在的模型。

© www.soinside.com 2019 - 2024. All rights reserved.