Можно ли найти методы во время выполнения, передавая переменную или имя строки в 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)