例如,可能会很生气地使用以下代码执行方法:
@Test
void shouldAccessMethodDynamically() {
DynamicClass dynamic = new DynamicClass()
String name = 'dynamicMethod'
assert dynamic."$name"() == "dynamic"
assert dynamic."dynamicMethod"() == "dynamic"
}
在科特林还能做到吗?
答案 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)