Могу ли я получить KFunction из переменной типа функции в Kotlin?

Я пытаюсь получить имя, в котором была определена функция с помощью

fun aFunction() = Unit fun functionName(function: () -> Unit) : String { val functionAsKFunction: KFunction<Unit> = someMiracle(function) return functionAsKFunction.name } assertEquals("aFunction", functionName(::aFunction)) 

Solutions Collecting From Web of "Могу ли я получить KFunction из переменной типа функции в Kotlin?"

Вы можете просто KFunction<*> () -> Unit в KFunction<*> . Теоретически это детализация реализации, но я не думаю, что она когда-нибудь сломается.

 fun functionName(function: () -> Unit) : String { val functionAsKFunction: KFunction<*> = function as KFunction<*> return functionAsKFunction.name } 

Изменить : Очевидно, что это не будет работать для lambdas (какое имя вы ожидали бы в любом случае?) Чтобы предотвратить сбои, вы можете использовать безопасный листинг, например:

 fun functionName(function: () -> Unit) : String? { val functionAsKFunction: KFunction<*> = function as? KFunction<*> ?: return null return functionAsKFunction.name }