【问题标题】:Kotlin - Return callback eventKotlin - 返回回调事件
【发布时间】:2019-11-14 15:40:51
【问题描述】:

我有一个关于 Kotlin 的小问题,

例如,我有一个具有此字段的 A 类:

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

    }
}

有没有 Kotlin 方法通过方法返回/传递/扩展 onChange 事件(不是值)?

我不想通过侦听器/回调(Java 方式)公开输出。 我正在寻找的是以某种方式返回 onChanged 方法调用,而不使用“中间”对象/回调

谢谢

【问题讨论】:

  • 我们可以返回一个future或者deferred方法吗?
  • 因为我是 Kotlin 的新手,所以我会说.. 是的,同时我会看看这些
  • 你对返回的“方法调用”做了什么?不完全清楚你的要求。

标签: android kotlin


【解决方案1】:

当我们说return 一个值时,它会将一个值返回给被调用者,在这种情况下,无论是谁调用了onChanged 方法。这发生在同步调用的情况下。

在这种情况下,onChanged 调用将以异步方式调用,这使得在没有回调的情况下无法简单地将值返回给被调用者。

【讨论】:

  • ...除了协程和挂起功能
【解决方案2】:

如果我正确理解您的问题,您可以使用observer.onChanged 作为Kotlin 函数:
val observerOnChangedFunction = observer.run { ::onChanged }
你可以调用这个函数:
observerOnChangedFunction(instanceOfO)

【讨论】:

    【解决方案3】:

    用例:onChanged 作为var 字段

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

    -

    用例:构造函数中的参数作为观察者

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

    -

    用例:构造函数中的参数为onChanged lambda

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-01
      • 2022-01-19
      • 1970-01-01
      • 1970-01-01
      • 2022-07-12
      • 1970-01-01
      • 2012-11-09
      相关资源
      最近更新 更多