jvm 当函数重载时,Kotlin如何确定调用哪个函数?

yacmzcpb  于 2022-11-07  发布在  Kotlin
关注(0)|答案(1)|浏览(97)

我们知道Kotlin允许我们使用默认参数,但是它如何确定当过载发生时调用哪个func呢?就像下面这样,结果是调用第一个test而不是第二个,但是为什么呢?

fun test() {

}

fun test(a: Int = 1) {

}
fun main() {
    test()
}
x8diyxa7

x8diyxa71#

Kotlin语言规范规定了重载解析的规则。
首先,它陈述了一般规则:
编译器应该先挑选多个多载候选者,以形成一组可能要呼叫的函式(多载候选者集,OCS),然后根据函式的型别和呼叫参数,选择最特定的函式来呼叫。
然后,在解释如何确定最具体的函数时,它指出:
对于每个候选项,我们计算在调用中未指定的默认参数的数量(即,我们使用默认值的参数的数量)。具有最少数量的未指定默认参数的候选项是更具体的候选项
在你的例子中,我们将选择没有默认参数的test()函数,因为它没有指定默认参数的数量较少,因此更具体。

相关问题