是否有可能在运行时中找到像在Groovy中那样在Kotlin中传递变量或字符串名称的方法

时间:2018-11-23 14:55:27

标签: kotlin kotlin-reflect

例如,可能会很生气地使用以下代码执行方法:

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

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

在科特林还能做到吗?

1 个答案:

答案 0 :(得分: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)