Kotlin | Найти параметр функции, которая возвращает лямбду, используя лямбду - PullRequest
1 голос
/ 14 января 2020

Скажем, у меня есть функция haveFun, которая принимает Method (из пакета java.lang.reflect) в качестве параметра и возвращает лямбду, как показано ниже

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

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

data class Game(val name: String)

Теперь, если я передам метод функцию и назначить лямбда-поле как

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

Могу ли я узнать и получить доступ к Method, который был передан функции, используя поле game выше, которое является лямбда?

Я вижу Method при отладке на Intellij, но не уверен, как получить к нему доступ.

enter image description here

1 Ответ

2 голосов
/ 14 января 2020

Вы можете получить доступ и использовать его через отражение как Объявленное поле , имеющее имя $method, следующим образом:

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