科特林 |使用 lambda 查找 returns lambda 函数的参数

Kotlin | Find param of a function which returns a lambda using the lambda

假设我有一个函数 haveFun,它接收一个 Method(来自 java.lang.reflect 包)作为参数和 returns 一个 lambda,如下所示

typealias AnyFun = (o: Any?) -> Any?

fun haveFun(method: Method): AnyFun {
    return { o -> method.invoke(o) }
}

data class Game(val name: String)

现在,如果我将一个方法传递给函数并将 lambda 分配给一个字段,如

val game = haveFun(Game::name.javaGetter!!)

我可以使用上面的 game 字段找到并访问传递给函数的 Method 吗?

我在 Intellij 上调试时可以看到 Method,但不确定如何访问它。

您可以通过反射将其作为具有 $method 名称的 declaredField 访问和使用,如下所示:

val methodField = game.javaClass.getDeclaredField("$method")
val method = methodField.get(game) as Method
println(method.invoke(Game("Pietro"))) // outputs the String "Pietro"