[英]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.