使用以下代码:
fun someFun(x: Any) {
}
fun foo(bar: (val x: Any) -> Unit) {
}
fun baz() {
foo(::someFun)
}
class Test {
fun someFun(x: Any) {
}
fun foo(bar: (val x: Any) -> Unit) {
}
fun baz() {
foo(::someFun)
}
}
在类的 outside 代码中,一切正常,没有错误。在Test :: baz中调用foo
时,我收到以下错误:
错误:(53,13)Kotlin:类型不匹配:推断类型是kotlin.reflect.KMemberFunction1但是(kotlin.Any) - >预计kotlin.Unit
为什么我不能像这样使用成员函数作为参数? The documentation并不是说我无法这样做。
答案 0 :(得分:3)
如果我们需要使用类的成员或扩展函数,则需要对其进行限定,结果将是“扩展函数”类型,例如String :: toCharArray为我们提供了String类型的扩展函数:String。() - > CharArray。
foo(Test::someFun)
类型更改为:
bar: Test.(Any) -> Unit
你也可以将lambda传递给函数来解决这个问题:
foo { bar -> someFun(bar) }
答案 1 :(得分:0)
在Test类中
更改代码
fun baz() {
foo(::someFun)
}
到
fun baz() {
foo(this::someFun)
}
会解决问题!
如果您想引用某种功能,请说
(Int,Int)->String
你有A级
class A{
fun whatever(a:Int,b:Int) = "${a},${b}"
}
您可以使用A()::whatever
引用该功能
其中A()表示A