是否可以在运行时找到方法,在 Kotlin 中传递变量或字符串名称,如 groovy
Is it possible to find methods during runtime passing a variable or a string name in Kotlin like in groovy
例如,在 groovy 中可以使用以下代码执行方法:
@Test
void shouldAccessMethodDynamically() {
DynamicClass dynamic = new DynamicClass()
String name = 'dynamicMethod'
assert dynamic."$name"() == "dynamic"
assert dynamic."dynamicMethod"() == "dynamic"
}
这在 Kotlin 中也可行吗?
您可以使用常规 java 反射按名称调用方法 API:
val dynamic = DynamicClass()
val name = "dynamicMethod"
dynamic.javaClass.getMethod(name).invoke(dynamic)
如果你更喜欢"kotlin way",你可以这样使用:
DynamicClass::class.memberFunctions.find { it.name == "name" }?.call(dynamic)
例如,在 groovy 中可以使用以下代码执行方法:
@Test
void shouldAccessMethodDynamically() {
DynamicClass dynamic = new DynamicClass()
String name = 'dynamicMethod'
assert dynamic."$name"() == "dynamic"
assert dynamic."dynamicMethod"() == "dynamic"
}
这在 Kotlin 中也可行吗?
您可以使用常规 java 反射按名称调用方法 API:
val dynamic = DynamicClass()
val name = "dynamicMethod"
dynamic.javaClass.getMethod(name).invoke(dynamic)
如果你更喜欢"kotlin way",你可以这样使用:
DynamicClass::class.memberFunctions.find { it.name == "name" }?.call(dynamic)