我有以下代码:
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)可调用引用:
- https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md#11-m01-eap-1
- https://blog.jetbrains.com/kotlin/2016/07/first-glimpse-of-kotlin-1-1-coroutines-type-aliases-and-more/
- http://kotlinlang.org/docs/reference/whatsnew11.html#bound-callable-references
- http://kotlinlang.org/docs/reference/reflection.html#bound-function-and-property-references-since-11
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/