Kotlin:我可以从main中给伴随对象中的变量赋值一个函数吗?

6yoyoihd  于 2022-12-04  发布在  Kotlin
关注(0)|答案(1)|浏览(135)

刚接触Kotlin,想知道是否有可能动态地给伴随对象的变量赋值。阅读这里的文档和一些答案,但是没有提到这一点。

class Printer {
    companion object {
        fun printAnything() {
            println("printing anything..")
        }
    }
}

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

fun main(args: Array<String>) {
    printA()
    Printer.printAnything = :: printA // doesn't compile, perhaps a different way?
}
uurity8g

uurity8g1#

不能重新分配用fun声明的函数。它总是指向同一个函数。但是可以创建一个var来保存对函数的引用。保存函数的varval属性可以作为函数调用,就像它是fun声明一样。

fun defaultPrintAnything() {
    println("printing anything...")
}

var printAnything = ::defaultPrintAnything

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

fun main() {
    printAnything() // calls defaultPrintAnything
    printAnything = ::printA
    printAnything() // calls printA
}

你可以在任何地方创建这样的变量,不管它是否在伴随对象中。所以,你可以这样创建你的Printer伴随对象:

class Printer {
    companion object {
        var printAnything = {
            println("printing anything..")
        }
    }
}

相关问题