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