kotlin - 无法引用伴随对象方法

标签 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

有没有办法引用伴生对象的方法?

最佳答案

在 Kotlin 1.4+ 中,您可以使用 process(A::bb)

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


在被问到这个问题后不久,Kotlin 1.1 发布并支持绑定(bind)可调用引用:

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

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

关于kotlin - 无法引用伴随对象方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35363831/

相关文章:

android - Gradle Kotlin DSL 的 versionCodeOverride 等价物

kotlin - 我如何在 Android Jetpack Compose 中的 Canvas 上绘制单侧加厚描边?

java - 返回数组索引并同时递增

java - 为 Kotlin 创建 POJO 类

android - Gradle 同步失败 : Cause: com/android/build/gradle/BaseExtension

android - Kotlin、NDK 和 C++ 交互

kotlin - 为什么Kotlin中的对象不能使用密封修饰符?

function - Kotlin:通用函数作为返回类型?

java - Spring Data JDBC org.springframework.data.mapping.MappingException : Could not read value rental_movie from result set

android - Firebase存储的OnSuccessListener回调未调用