对 Kotlin 中特定实例的方法的引用重载

Roc*_* Li 1 reflection function kotlin

很清楚如何引用特定实例的方法:Reference to method of a certain instance in Kotlin

例如

val f = a::getItem
Run Code Online (Sandbox Code Playgroud)

但是如果getItem超载了怎么办?我似乎找不到任何相关材料。

假设getItem具有以下重载函数:

getItem (String) -> Item
getItem (String, Metrics) -> Item
Run Code Online (Sandbox Code Playgroud)

如何通过绑定实例可调用来选择任何特定函数?

Swe*_*per 5

上下文将决定选择哪个重载。如果是

val f = a::getItem
Run Code Online (Sandbox Code Playgroud)

上下文没有说明类型a::getItem应该是什么,因此如果getItem重载,则两个重载都适用,并且会出现编译时错误准确地告诉您这一点。就像是:

过载分辨率模糊。所有这些功能都匹配。

  • public fun getItem(name: String): Item定义于...
  • public fun getItem(name: String, metrics: Metrics): Item定义于...

如果您给它一些有关类型的信息f

val f: (String) -> Item = a::getItem
Run Code Online (Sandbox Code Playgroud)

然后它会选择正确的过载。