科特林 |使用 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"
假设我有一个函数 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"