You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Kotlin匿名函数的参数信息?普通函数可正常获取

如何获取Kotlin匿名函数的参数信息?

问题背景

在Kotlin中,普通函数可以通过::函数名.parameters直接获取非空的参数列表:

// 普通函数示例
fun something(a: String, b: String): String {
    return "$a $b"
}
println(::something.parameters) // 输出非空参数列表

但对于赋值给变量的匿名函数,用同样方式获取参数列表会返回空:

// 匿名函数示例
var something = fun(a: String, b: String): String {
    return "$a $b"
}
println(::something.parameters) // 输出空列表

原因分析

核心差异在于:

  • 普通函数的::something是KFunction类型的函数引用,直接携带函数的元数据(包括参数信息);
  • 匿名函数赋值给变量后,::something是KProperty类型的变量引用,指向的是存储函数实例的变量而非函数本身,因此无法获取函数的参数信息。

解决方案

要获取匿名函数的参数信息,需要直接对变量中的函数实例进行反射操作,而非变量本身:

方式一:Kotlin反射(推荐)

确保项目已引入kotlin-reflect依赖,将函数实例转换为KFunction类型后即可获取参数列表:

import kotlin.reflect.full.parameters

var something = fun(a: String, b: String): String {
    return "$a $b"
}

// 获取匿名函数的参数列表
val functionParams = (something as KFunction<*>).parameters
println(functionParams) // 输出包含两个String类型参数的列表

方式二:Java反射

如果不想引入Kotlin反射依赖,可通过Java反射获取函数的invoke方法参数:

var something = fun(a: String, b: String): String {
    return "$a $b"
}

// 遍历方法,找到invoke方法并输出参数类型
something.javaClass.methods.forEach { method ->
    if (method.name == "invoke") {
        println("参数类型:${method.parameterTypes.contentToString()}")
    }
}

内容的提问来源于stack exchange,提问作者dbwhddn10

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 02:13:17