Kotlin函数类型而不是函数接口lambda
我正在苦苦挣扎在java中的功能接口的对面。 我有以下问题。
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 } }
我有以下情况,首先onReceiveResult
被调用,然后我想要将onReceiveResult
的参数的值传递给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){ if (resultHandler != null) resultHandler(resultCode, resultData) } }
为什么不这样做呢? 在初始化期间提供结果回调:
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) } }