无法引用随播对象方法

时间:2016-02-12 13:27:34

标签: kotlin

我有以下代码:

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

有没有办法引用伴侣对象方法?

2 个答案:

答案 0 :(得分:4)

从语法上讲,它将是A.Factory:bb,但它不起作用。首先,bbA.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 } } 的函数。