无法引用伴生对象方法

Unable to reference companion object methods

我有以下代码:

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

有什么方法可以引用伴随对象的方法吗?

语法上应该是 A.Factory:bb 但它不起作用。首先,bbA.Factory.() -> Int,而 () -> Int 是必需的。

其次,正如 Kotlin 编译器所说,目前不支持对对象成员的可调用引用。这是所有可调用成员任务的父任务:https://youtrack.jetbrains.com/issue/KT-1183.

在 Kotlin 1.4+ 中你可以使用 process(A::bb).

在 1.1.2+ 中你可以使用 process(A.Factory::bb)process((A)::bb).


在提出这个问题后不久,Kotlin 1.1 发布并支持绑定可调用引用:

Kotlin 1.1.2 修复了 KT-15951,这意味着从那时起您可以调用 process(A.Factory::bb).

还有针对 Kotlin 1.4 的 KT-13934,以支持 process(A::bb)