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)

当我这样做的时候,意味着我想使用第一个布尔值为默认值的函数,我得到一个错误,说它需要一个字符串,它找到了一个请求。

我认为编译器与默认值和多态性混淆了;它似乎不知道该用女巫的功能。有什么方法可以解决这个问题吗?还是每次都必须明确声明默认值,使默认值变得无用?

将默认值位于第一个函数第三位的参数移动,使其成为

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
}
}

最新更新