You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin次级构造函数未调用求助:构造函数内代码无输出

问题排查:次级构造函数未被调用的原因及解决方法

你的问题核心很明确:带age参数的次级构造函数完全没执行,因为你在main函数里创建Person对象时,调用的是主构造函数,而非这个次级构造函数。

解决方法一:直接调用次级构造函数

修改main里的对象创建代码,传入次级构造函数要求的三个参数:

fun main() {
    var vinay = Person("Chaitra", "Vinay", 25) // 调用带age的次级构造函数
    vinay.hobby = "Play tennis"
    vinay.stateHobby()
    println("vinay is ${vinay.age} years old")
}

这样次级构造函数里的打印语句就会正常执行。

解决方法二:改用主构造函数可选参数(更符合Kotlin风格)

Kotlin推荐用主构造函数+默认参数替代次级构造函数,代码更简洁。调整Person类的实现:

class Person(firstName: String = "Chaitra", lastName: String = "Nadig", age: Int? = null) {
    var age: Int? = age
    var hobby: String = "Coding"

    init {
        println("Welcome $firstName $lastName")
        // 仅当age不为空时打印年龄相关内容
        age?.let { println("Person is $firstName $lastName aged $it") }
    }

    fun stateHobby() {
        println("Hobby is $hobby")
    }
}

此时创建对象可以灵活传参:

// 只传lastName,使用默认的firstName和null的age
var vinay = Person(lastName = "Vinay")
// 或者同时传lastName和age
var vinay = Person(lastName = "Vinay", age = 25)

为什么原来的次级构造函数没被触发?

你定义的主构造函数所有参数都有默认值,当你用Person(lastName = "Vinay")创建对象时,Kotlin会自动匹配主构造函数(填充默认的firstName值),完全不会调用你写的次级构造函数,所以里面的代码自然不会执行。

内容的提问来源于stack exchange,提问作者Chaitra D

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 01:42:47