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
相关产品推荐
相关产品推荐

