简体   繁体   中英

Kotlin - Return callback event

I have a quick question about Kotlin,

For example I have a class A which have this field:

private val observer: Observer<O> = object : Observer<O> {
    override fun onChanged(output: O) {

    }
}

Is there any Kotlin way of returning/passing/extending the onChange event (not the value) thru a method?

I don't want to expose the output thru a listener/callback(Java way). What I'm looking for is to somehow return the onChanged method call, without using a "middle" object/callback

Thanks

when we say return a value, it returns a value back to the callee, in this case, whoever called the onChanged method. This happens in case of synchronous calls.

In this case, onChanged call will be invoked in an asynchronous manner which makes it impossible to simply return a value back to the callee without a callback.

If i correctly understand your question, you can use observer.onChanged as Kotlin Function:
val observerOnChangedFunction = observer.run {::onChanged }
Than you can invoke this function:
observerOnChangedFunction(instanceOfO)

Usecase: onChanged as var field

class Foo<O> {

   var onChanged: (O) -> Unit = { /* default */}

   private val observer: Observer<O> = object : Observer<O> {
      override fun onChanged(output: O) = onChanged(output)
   }
}

fun main() {
   val foo = Foo<Int>()
   foo.onChanged = { it.toString() }
}

-

Usecase: parameter in constructor as observer

class Foo<O> (
   observer: Observer<O>
) {
   private val observer: Observer<O> = observer
}

-

Usecase: parameter in constructor as onChanged lambda

class Foo<O> (
   onChanged: (O) -> Unit
) {
   private val observer: Observer<O> = object : Observer<O> {
      override fun onChanged(output: O) = onChanged(output)
   }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM