Kotlin中多态函数中的参数定位。

问题描述 投票:2回答:3

嗨,我是kotlin的新手,我想拥有2个带默认参数的Polymorphique函数,但它似乎没有工作。这是我的代码。

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)

当我这样做的时候,也就是说,我想使用第一个函数的默认值boolean,我得到了一个错误,说它需要字符串,它发现了request。

我认为是编译器把默认值和多态性搞混了,它似乎不知道该用哪个函数。有什么办法可以解决这个问题,还是说我每次都要明确地声明默认值,使得默认值毫无用处?

kotlin polymorphism default-value
3个回答
4
投票

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

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

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


4
投票

由Abubakar回答 工作,推荐方式--最后保留默认参数。不过,你的方法也可以。只要确保在默认值之后的参数使用命名参数。

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

也能用。


0
投票

默认情况下,参数是基于位置的,或者你必须像下面的例子一样指定参数名。

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
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.