如何使用Kotlin反射按名称调用方法?

如何使用Kotlin反射按名称调用方法?,kotlin,reflection,Kotlin,Reflection,在Kotlin中有没有简单的方法可以通过名称调用方法 比如: val obj: Any obj.invokeMethod("methodName", args...) 试试这个: obj::class.members.firstOrNull { it.name == "methodName" }?.call(argument1, argument2, ...) 试试这个: obj::class.members.firstOrNull { it.name

在Kotlin中有没有简单的方法可以通过名称调用方法

比如:

val obj: Any
obj.invokeMethod("methodName", args...)
试试这个:

obj::class.members.firstOrNull { it.name == "methodName" }?.call(argument1, argument2, ...)
试试这个:

obj::class.members.firstOrNull { it.name == "methodName" }?.call(argument1, argument2, ...)

你为什么要这样做?使用反射是可能的,但对于普通的应用程序代码来说,这通常不是一个好主意,因为它性能差、脆弱、绕过所有类型检查、可能抛出各种应处理的异常、往往冗长且难以读取,并且会破坏封装和其他安全机制。它主要用于插件、依赖注入框架和其他工具。我需要它来将操作从JSON映射到Kotlin代码。为什么要这样做?使用反射是可能的,但对于普通的应用程序代码来说,这通常不是一个好主意,因为它性能差、脆弱、绕过所有类型检查、可能抛出各种应处理的异常、往往冗长且难以读取,并且会破坏封装和其他安全机制。它主要用于插件、依赖注入框架和其他工具。