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

Kotlin传递函数引用至Array构造器出现类型不匹配错误的原因

为什么传递函数引用给Array构造器会出现类型不匹配?

嘿,别担心,这真的是Kotlin新手很容易踩的小坑,我来给你掰扯清楚~

首先先给你吃个定心丸:你的square函数类型(Int) -> Int,和Array<Int>构造器要求的init参数类型是完全匹配的——构造器的第二个参数就是需要一个接收索引(Int类型)、返回对应元素(这里是Int)的函数。那问题出在哪呢?

答案很简单:你传递函数的方式错了!

在Kotlin里,如果你想把一个已定义的函数作为引用传递给高阶函数(比如Array的构造器),必须用::操作符来获取这个函数的引用。你直接写square的时候,编译器会误以为你是想调用这个函数,但square需要一个Int参数,这里你没传,自然就会抛出类型不匹配的错误——毕竟构造器要的是一个函数对象,而你给的是一个未完成的函数调用(连参数都没填)。

修正后的代码应该是这样:

fun square(arg : Int) : Int{ 
    return arg * arg 
}

fun main() {
    val arr: Array<Int> = Array(5, ::square)
    // 如果你觉得写函数引用麻烦,也可以直接用lambda表达式,更简洁:
    // val arr = Array(5) { it * it }
}

这样一来,::square就把你的square函数转换成了符合构造器要求的函数类型对象,编译器就不会报错啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:57:02