Можно ли найти методы во время выполнения, передавая переменную или имя строки в Kotlin, как в groovy

Например, в grovy есть возможность выполнить метод, используя следующий код:

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

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

Возможно ли это и в Котлине?

1 ответ

Решение

Вы можете вызвать метод по имени, используя обычный API отражения java:

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

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

Если вам нравится делать это более "по-котлински", вы можете использовать это так:

DynamicClass::class.memberFunctions.find { it.name == "name" }?.call(dynamic)
Другие вопросы по тегам