是否可以在运行时找到方法,在 Kotlin 中传递变量或字符串名称,如 groovy

Is it possible to find methods during runtime passing a variable or a string name in Kotlin like in groovy

例如,在 groovy 中可以使用以下代码执行方法:

    @Test
    void shouldAccessMethodDynamically() {
       DynamicClass dynamic = new DynamicClass()
       String name = 'dynamicMethod'

       assert dynamic."$name"() == "dynamic"
       assert dynamic."dynamicMethod"() == "dynamic"
    }      

这在 Kotlin 中也可行吗?

您可以使用常规 java 反射按名称调用方法 API:

val dynamic = DynamicClass()
val name = "dynamicMethod"

dynamic.javaClass.getMethod(name).invoke(dynamic)

如果你更喜欢"kotlin way",你可以这样使用:

DynamicClass::class.memberFunctions.find { it.name == "name" }?.call(dynamic)