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

Kotlin:能否在main函数中为伴生对象的变量赋值函数?

在Kotlin中动态修改伴生对象的函数实现

你原来的代码编译不通过,核心原因是:伴生对象里的printAnything是固定的成员函数,不是可赋值的变量,没法直接替换它的实现。要实现动态赋值的效果,得把它改成函数类型的变量。

直接上修改后的可行代码:

class Printer {
    companion object {
        // 定义一个函数类型的变量,初始绑定默认的打印逻辑
        var printAnything: () -> Unit = {
            println("printing anything..")
        }
    }
}

fun printA() {
    println("printing A!")
}

fun main(args: Array<String>) {
    printA()
    // 动态给变量赋值新的函数引用
    Printer.printAnything = ::printA
    // 调用修改后的函数(因为是函数类型变量,直接加括号执行)
    Printer.printAnything()
}

关键说明:

  • () -> Unit是Kotlin的函数类型,表示"无参数、无返回值"的函数,如果你需要带参数或有返回值,直接调整这个类型就行,比如(String) -> Boolean表示接收String参数、返回Boolean的函数。
  • 如果不想让外部随意修改这个变量,可以给它加private set,只暴露getter,内部通过特定方法修改,比如:
    companion object {
        var printAnything: () -> Unit = { ... }
            private set
        
        fun updatePrintFunction(newFunc: () -> Unit) {
            printAnything = newFunc
        }
    }
    
    这样外部只能通过updatePrintFunction方法来修改,更安全。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 08:45:30