我正在尝试获取定义函数的名称
fun aFunction() = Unit
fun functionName(function: () -> Unit) : String {
val functionAsKFunction: KFunction<Unit> = someMiracle(function)
return functionAsKFunction.name
}
assertEquals("aFunction", functionName(::aFunction))
Run Code Online (Sandbox Code Playgroud)
你可以简单地投射() -> Unit到KFunction<*>.从理论上讲,这是一个实现细节,但我认为它不会破坏.
fun functionName(function: () -> Unit) : String {
val functionAsKFunction: KFunction<*> = function as KFunction<*>
return functionAsKFunction.name
}
Run Code Online (Sandbox Code Playgroud)
编辑:显然,这不适用于lambdas(无论如何你会想到什么名字?)为了防止崩溃,你可以使用像这样的安全演员:
fun functionName(function: () -> Unit) : String? {
val functionAsKFunction: KFunction<*> = function as? KFunction<*> ?: return null
return functionAsKFunction.name
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
884 次 |
| 最近记录: |