kotlin可以在类初始化时定义动态方法吗?

jun*_*unk 4 methods kotlin

我的课:

class Demo {
    init {
        // define method here my some array:[a,b,c]
        // such as fun Demo.a,Demo.b...
    }
}
Run Code Online (Sandbox Code Playgroud)

函数名称是动态的。

Kotlin 可以做到这一点吗?

Kir*_*man 5

不,你不能在类中动态定义函数,但因为函数也是对象,所以你可以动态存储它们(在字段、数组、映射中)并动态调用它们。使用 Kotlin 的一些语言特性,我们可以获得非常简洁的语法:

class Demo(name: String) {
    private val functions: Map<String, () -> Any> = mapOf(name to { "Hello $name" })

    operator fun get(name: String): Any? = functions[name]?.invoke()
}

fun main(args: Array<String>) {
    val demo = Demo("Kirill")

    println(demo["Kirill"])
}
Run Code Online (Sandbox Code Playgroud)

输出:

你好基里尔