无法引用伴生对象方法
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
但它不起作用。首先,bb
是 A.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 发布并支持绑定可调用引用:
- 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)
.
还有针对 Kotlin 1.4 的 KT-13934,以支持 process(A::bb)
。
我有以下代码:
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
但它不起作用。首先,bb
是 A.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 发布并支持绑定可调用引用:
- 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)
.
还有针对 Kotlin 1.4 的 KT-13934,以支持 process(A::bb)
。