我有以下代码:
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
}
Run Code Online (Sandbox Code Playgroud)
当我尝试呼叫时,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
Run Code Online (Sandbox Code Playgroud)
有没有办法引用伴侣对象方法?
您可以使用process(A.Factory::bb)
或process((A)::bb)
现在。
提出此问题后不久,Kotlin 1.1发行了,它支持绑定的可调用引用:
Kotlin 1.1.2带有针对KT-15951的修复程序,这意味着从那时起您可以致电process(A.Factory::bb)
。
也有针对Kotlin 1.4的KT-13934process(A::bb)
,尽管您的A
定义为:
class A {
fun bb() = 5
companion object Factory {
fun bb() = 6
}
}
Run Code Online (Sandbox Code Playgroud)
您必须记住,它将5
像现在一样使用返回的函数。
从语法上讲是可以的,A.Factory:bb
但行不通。起初,需要bb
一段A.Factory.() -> Int
时间。() -> Int
其次,正如 Kotlin 编译器所说,目前不支持对对象成员的可调用引用。以下是所有可调用成员任务的父任务:https://youtrack.jetbrains.com/issue/KT-1183。
归档时间: |
|
查看次数: |
2629 次 |
最近记录: |