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

Kotlin中Any::hashCode函数引用类型不匹配问题解析

Kotlin成员函数引用的隐式参数解析

先看代码示例:

fun myHashcode() : Int{
        return 1
}

val functionRef1: () -> Int = Any::hashCode // 编译报错:类型不匹配
val functionRef2: () -> Int = ::myHashcode // 正常编译

报错信息明确显示:Type mismatch. Required: () → Int Found: KFunction1<Any, Int>,按照提示把functionRef1的类型改成(Any) -> Int就能正常编译。

这个额外的Any参数,本质是成员函数自带的隐式this参数。

在Kotlin里,所有非静态的成员函数,底层都会默认接收一个指向当前类实例的引用——就是我们在函数里用的this。当你用类名::成员函数的方式获取函数引用时,这个原本隐藏的this会被转成函数的第一个显式参数。

拿Any的hashCode来说,它的定义看起来是无参的:

fun hashCode(): Int

但在JVM层面,它实际等价于带一个实例参数的函数:

fun hashCode(this: Any): Int

所以Any::hashCode的函数引用类型就是(Any) -> Int——第一个参数用来传入要调用hashCode的Any实例,调用时就相当于实例.hashCode()。

而像::myHashcode这种顶层函数(不属于任何类的函数),没有所属的实例,所以不需要额外参数,类型就和它的定义一致,是() -> Int。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 04:35:11