Kotlin 多态函数中的参数定位

Parameters positioning in polymorphic functions in Kotlin

我是 kotlin 的新手,我想有两个带有默认参数的多态函数,但它似乎不起作用。这是我的代码:

private fun add(request: Request, share: Boolean = false, number : Int){
   Do something ... 
}
private fun add(key: String, share: Boolean = false){
   Do something ... 
}

我的问题是我不能使用默认值,因为编译器似乎没有推断它。

add(request,  number)

当我这样做时,意味着我想使用布尔值默认值的第一个函数,我收到一条错误消息,指出它需要一个字符串并找到了一个请求。

我认为编译器混淆了默认值和多态性;它似乎不知道要使用 函数。有什么方法可以解决这个问题,还是我每次都必须显式声明默认值使默认值无用?

将默认值的参数移到第一个函数的第 3 位,这样它就变成

private fun add(request: Request, number : Int, share: Boolean = false){ Do something ...

它会起作用的。 你可以通过命名参数来解决这个问题,例如 如果你调用 add(request = request, number = number) 它也会工作

Abubakar 的回答有效和推荐的方式 - 最后保留默认参数。但是,您所拥有的也可以。只要确保在默认值之后的参数使用命名参数即可。

add(request, number = 5) // Or add(request, number= myNumberValue)

也可以。

默认情况下参数是基于位置的,或者您必须指定参数名称,如下例所示:

fun addName(name: String, newUser: Boolean, surname: String = "") {

}

fun addName(name: String) {

}


class Person() {
    init {
        addName(name = "Johnny", surname = "BeGood", newUser = true) // Using 1st function with mixed positions parameters
        addName("Jack") // Using 2nd function
    }
}