首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法引用伴生对象方法

无法引用伴生对象方法
EN

Stack Overflow用户
提问于 2016-02-12 13:27:34
回答 2查看 4.8K关注 0票数 11

我有以下代码:

代码语言:javascript
复制
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)时,我得到以下错误:

代码语言:javascript
复制
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

有任何方法来引用伴生对象方法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-12 14:20:58

从语法上讲,它将是A.Factory:bb,但它将无法工作。起初,bb是一个A.Factory.() -> Int,而() -> Int是必需的。

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

票数 4
EN

Stack Overflow用户

发布于 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)

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35363831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档