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) } }