1

假设我有一个函数haveFun,它接受一个Method(来自java.lang.reflect包)作为参数并返回一个 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!!)

我可以使用上面的 lambda 字段找出并访问Method传递给函数的那个​​吗?game

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

在此处输入图像描述

4

1 回答 1

2

您可以通过反射访问和使用它作为 具有名称的声明$method字段,如下所示:

val methodField = game.javaClass.getDeclaredField("\$method")
val method = methodField.get(game) as Method
println(method.invoke(Game("Pietro"))) // outputs the String "Pietro"
于 2020-01-14T14:26:52.890 回答