我有以下代码:
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
有没有办法引用伴侣对象方法?
答案 0 :(得分:4)
从语法上讲,它将是A.Factory:bb
,但它不起作用。首先,bb
是A.Factory.() -> Int
,而() -> Int
是必需的。
其次,Kotlin编译器说,目前不支持对对象成员的可调用引用。这是所有可调用成员任务的父任务:https://youtrack.jetbrains.com/issue/KT-1183。
答案 1 :(得分:1)
您现在可以使用process(A.Factory::bb)
或process((A)::bb)
。
问了这个问题不久后,Kotlin 1.1发布了,它支持绑定的可调用引用:
Kotlin 1.1.2带有KT-15951的修复程序,这意味着从那时起您就可以调用process(A.Factory::bb)
。
还有KT-13934是针对Kotlin 1.4的,尽管您将process(A::bb)
定义为:
A
您必须记住,它将像现在一样使用返回class A {
fun bb() = 5
companion object Factory {
fun bb() = 6
}
}
的函数。