【问题标题】:kotlin overload method with default parameter带有默认参数的kotlin重载方法
【发布时间】:2018-04-20 11:20:05
【问题描述】:

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

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

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

foo(1)具体方法如何参考?

【问题讨论】:

  • 不要认为这是可能的,这会导致编译期间出现“Overload resolution ambiguity”错误。你需要两个不同的函数名。

标签: kotlin


【解决方案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) { ... } 

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

【讨论】:

  • 看来重命名是唯一的办法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-24
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 2018-01-29
  • 1970-01-01
相关资源
最近更新 更多