类init时kotlin可以定义动态方法吗?

时间:2017-06-07 08:51:45

标签: methods kotlin

我的课程:

class Demo {
    init {
        // define method here my some array:[a,b,c]
        // such as fun Demo.a,Demo.b...
    }
}

函数名称是动态的。

Kotlin可以这样做吗?

2 个答案:

答案 0 :(得分:2)

不,您不能在类中动态定义函数,但由于函数也是对象,您可以动态存储它们(在字段,数组,映射中)并动态调用它们。使用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"])
}

输出:

  

Hello Kirill

答案 1 :(得分:0)

不,Kotlin是一种静态类型的语言。这意味着必须在编译时知道每个变量和方法的类型。