嗨,我是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。
我认为是编译器把默认值和多态性搞混了,它似乎不知道该用哪个函数。有什么办法可以解决这个问题,还是说我每次都要明确地声明默认值,使得默认值毫无用处?
将默认值的参数移到第一个函数的第三位,这样它就会变为
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
}
}