我有以下代码:
fun process(call: () -> Int) {
}
fun aa() = 5
class A {
companion object Factory {
fun bb() = 6
}
}
fun test() {
process(::aa) // OK
process(::A.bb) // Overload resolution ambiguity
}当我试图调用process(::A.bb)时,我得到以下错误:
Error:Overload resolution ambiguity:
public constructor A() defined in ru.netimen.hitch_hikingstats.A
public companion object Factory defined in ru.netimen.hitch_hikingstats.A有任何方法来引用伴生对象方法吗?
发布于 2016-02-12 14:20:58
从语法上讲,它将是A.Factory:bb,但它将无法工作。起初,bb是一个A.Factory.() -> Int,而() -> Int是必需的。
其次,目前不支持对对象成员的可调用引用,正如Kotlin编译器所说的那样。以下是所有可调用成员任务的父任务:https://youtrack.jetbrains.com/issue/KT-1183。
发布于 2019-02-26 18:53:19
在Kotlin 1.4+中,您可以使用process(A::bb)。
在1.1.2+中,您可以使用process(A.Factory::bb)或process((A)::bb)。
在这个问题被问到之后不久,Kotlin 1.1就发布了,支持绑定可调用引用:
Kotlin1.1.2为KT-15951提供了一个修复程序,这意味着从那时起您就可以调用process(A.Factory::bb)了。
还有一个针对Kotlin1.4的KT-13934,用于支持process(A::bb)。
https://stackoverflow.com/questions/35363831
复制相似问题