我可以从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 }