Kotlin:我可以将函数分配给 main 中伴随对象中的变量吗?

标签 kotlin

刚接触 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..")
        }
    }
}

关于Kotlin:我可以将函数分配给 main 中伴随对象中的变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74625888/

相关文章:

kotlin - 从 Kotlin 调用 Java 时的可空规则是什么

android - 在 BuildConfig 中隐藏 api key 安全吗?

Android 导航组件 Unresolved reference

java - mainClassName的etter : String' is deprecated.在Java中已弃用

android-studio - Android Studio StyleRes 注释在 Kotlin var 上给出警告

java - Flutter错误:无法下载bundletool.jar(com.android.tools.build:bundletool:0.9.0)

android - 为 Kotlin 多平台项目运行单元测试时出错

java - Gradle Kotlin 应用程序的启动脚本找不到主类

enums - 枚举惰性属性

android - 如何使用Android CameraX库缩放预览?