繁体   English   中英

调用时无法访问函数

[英]Function not reachable when called

val res = Response.Listener<String> {
    fun onResponse(s: String) {
        doOnSuccess(s)
    }
}

当toast可正确执行时,程序中永远不会使用onResponse函数(无法从检查范围访问)。

正如@mTak所说,你错过了override修饰符。

这是更正后的代码:

val res = Response.Listener<String> {
    override fun onResponse(s: String) {
      doOnSuccess(s)
    }
}

应该是公正的

val res = Response.Listener<String> {
    doOnSuccess(it)
}

或者

val res = object : Response.Listener<String> {
    override fun onResponse(s: String) {
        doOnSuccess(s)
    }
}

使用你的代码,Kotlin认为它是第一种形式,除了方法的主体只是声明一个巧合地称为onResponse的函数onResponse做任何其他事情; 它是一样的

Response.Listener<String> {}    

问题

问题是你在lambda中定义了一个匿名函数onResponse ,它永远不会被调用!

一个解法:

val res = Response.Listener<String> {
    fun onResponse(s: String) {
        doOnSuccess(s)
    }
    onResponse(it) // invocation
}

更好的解决方案:

由于doOnSuccess似乎接受String作为单个参数并且它返回Unit ,因此也可以使用函数引用。

val res = Response.Listener<String>(::doOnSuccess)

我没有测试它,但在这种情况下,我认为你甚至可以省略显式类型,因为Kotlin可以从函数引用中推断它。

val res = Response.Listener(::doOnSuccess)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM