我可以从Kotlin的函数类型变量中获得K函数吗?

我试图得到一个函数定义的名称

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

你可以简单的将() -> Unit KFunction<*>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 }