我正在尝试使用
来定义函数的名称fun aFunction() = Unit
fun functionName(function: () -> Unit) : String {
val functionAsKFunction: KFunction<Unit> = someMiracle(function)
return functionAsKFunction.name
}
assertEquals("aFunction", functionName(::aFunction))
答案 0 :(得分:6)
您可以简单地将() -> 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
}