Kotlin:我可以把函数赋值给main的同伴对象中的变量吗?



刚接触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?
}

不能重新分配用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..")
}
}
}

最新更新