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

带有默认参数的kotlin重载方法,kotlin,Kotlin,这里是场景,我得到了以下两种方法 fun foo(p1:Int,p2:String?=null) fun foo(p1:Int,p2:Int=0) 如何使用foo(1)引用特定方法?如果调用方只有一个参数,则这是一个错误: foo(1) // error 错误:(Y,X)Kotlin:重载分辨率模糊度: public-fun-foo(p1:Int,p2:Int=…):在MyFile.kt文件的mypackage中定义的单位 public-fun-foo(p1:Int,p2:String?=

这里是场景,我得到了以下两种方法

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

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

如何使用
foo(1)
引用特定方法?

如果调用方只有一个参数,则这是一个错误:

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) { ... } 

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

不要认为这是可能的,这将导致编译过程中出现“重载解析模糊”错误。您需要两个不同的函数名。看来重命名是唯一的方法