Kotlin函数类型代替函数接口lambda
在kotlin中,我正在努力与java中的函数接口相反。我有以下问题Kotlin函数类型代替函数接口lambda,lambda,kotlin,Lambda,Kotlin,在kotlin中,我正在努力与java中的函数接口相反。我有以下问题 class ResultReceiverTest(handler : Handler) : ResultReceiver(handler) { fun onResult(result : (resultCode : Int, resultData: Bundle) -> Unit){ // result() how to receive values from onReceiveResult()
class ResultReceiverTest(handler : Handler) : ResultReceiver(handler) {
fun onResult(result : (resultCode : Int, resultData: Bundle) -> Unit){
// result() how to receive values from onReceiveResult() method?
}
override fun onReceiveResult(resultCode: Int, resultData: Bundle){
// how to call onResult from here?
// I want to pass resultCode, resultData parameter to onResult function
}
}
我有以下情况,首先调用onreceivesult
,然后我想将onreceivesult
的参数值传递给onResult
,这样我就可以将值传递给result()
,这是由下面的类实现的
class StartService {
private var resultReceiverTest = ResultReceiverTest(Handler())
init{
resultReceiverTest.onResult({a, b -> something()})
}
fun something(){}
}
那么我如何将值从
onReceiveResult
传递到onResult
?我知道kotlin中的函数接口和匿名类解决方案。但是我想使用lambda实现它,这也将有助于我理解lambda。您可以使用属性来保存处理程序
class ResultReceiverTest(handler : Handler) : ResultReceiver(handler) {
private var resultHandler: ((resultCode : Int, resultData: Bundle) -> Unit)? = null
fun onResult(result : (resultCode : Int, resultData: Bundle) -> Unit){
resultHandler = result
}
override fun onReceiveResult(resultCode: Int, resultData: Bundle){
resultHandler?.invoke(resultCode, resultData)
}
}
为什么不这样做呢?在初始化期间提供on result回调:
class ResultReceiverTest(handler: Handler, private val onResult: (Int, Bundle) -> Unit) : ResultReceiver(handler) {
override fun onReceiveResult(resultCode: Int, resultData: Bundle) {
onResult(resultCode, resultData)
}
}
// Do it with a function reference
class StartService {
private var resultReceiverTest = ResultReceiverTest(Handler(), this::doSomethingWithResult)
fun doSomethingWithResult(resultCode: Int, resultData: Bundle) {
println(resultCode)
}
}
// OR DO IT INLINE
class StartService {
private var resultReceiverTest = ResultReceiverTest(Handler()) { resultCode, resultData -> println(resultCode) }
}
我在第二行看到错误
null
。我无法分配null。找到了解决方案。我得在论文中把这类字圈起来<代码>((resultCode:Int,resultData:Bundle)->单位)?如何调用resultCode
?使用显式?.invoke()
显示错误。为什么要调用resultCode
?这是一个参数,您只是不能调用参数。对不起,我刚才说的是resultHandler
如何调用resultCode
?使用显式?.invoke()
会显示错误。错误是什么?上面的代码在Kotlin 1.1.3中编译得很好,这是一个打字错误。我说的是resultReceiverTest
函数