0

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

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

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

这在 Kotlin 中也可以吗?

4

1 回答 1

1

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

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

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

如果你喜欢用更多的“kotlin 方式”来做,你可以像这样使用它:

DynamicClass::class.memberFunctions.find { it.name == "name" }?.call(dynamic)
于 2018-11-23T16:58:18.100 回答