刚接触 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 来保存对函数的引用。保存函数的 var
或 val
属性可以作为函数调用,就像它是 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..")
}
}
}
关于Kotlin:我可以将函数分配给 main 中伴随对象中的变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74625888/