调用时无法访问功能

时间:2018-07-24 17:15:19

标签: android kotlin

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

在正确执行Toast的情况下,程序中永远不会使用功能onResponse(无法从检查范围访问)。

3 个答案:

答案 0 :(得分:2)

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

这是更正的代码:

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

答案 1 :(得分:1)

should be just

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

或者

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

对于您的代码,Kotlin将其视为第一种形式,除了方法的主体只是声明一个巧合地称为onResponse的函数而没有执行其他操作;与

相同
Response.Listener<String> {}    

答案 2 :(得分:0)

问题

问题是您在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)