带有默认参数的kotlin重载方法

时间:2018-04-20 02:43:08

标签: kotlin

这是一个场景,我得到了以下两种方法。

fun foo(p1:Int,p2:String?=null)

fun foo(p1:Int,p2:Int=0)

如何使用foo(1)

参考具体方法

1 个答案:

答案 0 :(得分:2)

如果调用者只有一个参数,则会出错:

 
foo(1) // error
  

错误:(Y,X)Kotlin:过载分辨率模糊:

     

public fun foo(p1:Int,p2:Int = ...):文件MyFile.kt中mypackage中定义的单位

     

public fun foo(p1:Int,p2:String?= ...):在文件MyFile.kt mypackage中定义的单位

因此,您必须以不同方式命名它们或提供另一个区别(另一个参数),以便编译器知道选择哪个选项。无法想象第二个参数可能是什么来选择默认值。

如果您可以使逻辑工作(可能不是),您也可以将它组合成一个具有两个可选参数的函数。

或者让他们只使用两个相关名称命名,这些名称也描述了差异,例如对于一些虚构的方法:

calcValueFromInt(p1: Int, p2: Int = 0) { ... }
calcValueFromString(p1: Int, p2: String? = null) { ... } 

无论如何,这都提高了可读性。