Можно ли найти методы во время выполнения, передавая переменную или имя строки в Kotlin, как в groovy - PullRequest
0 голосов
/ 23 ноября 2018

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

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

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

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

1 Ответ

0 голосов
/ 23 ноября 2018

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

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

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

Если вы хотите сделать это более «kotlin», вы можете использовать его следующим образом:

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