首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当我们有属性设置器时,`Delegates.observable`的用例是什么?

当我们有属性设置器时,`Delegates.observable`的用例是什么?
EN

Stack Overflow用户
提问于 2018-04-22 05:55:58
回答 2查看 3.6K关注 0票数 22

当我们只能使用属性设置器时,Delegates.observable的用例是什么?

代码语言:javascript
复制
 var foo by Delegates.observable("hell0") { prop, old, new ->
    // react to changes in foo
  }

  var bar = "hello"
    set(value) {
      field = value
      // react to changes in bar
      // we can also do validation, set something like `value*2` to field, etc.
    }
EN

回答 2

Stack Overflow用户

发布于 2018-04-22 06:04:50

如果您希望多个属性以相同的方式对修改做出反应,则属性setter需要更多的代码复制:

代码语言:javascript
复制
var foo: Foo = Foo()
    set(value) {
        println("foo = $value")
        field = value
    }

var bar: Bar = Bar()
    set(value) {
        println("bar = $value")
        field = value
    }

反过来,委托的目的是允许重用属性访问器逻辑,如下所示:

代码语言:javascript
复制
fun <T> printDelegate(init: T) = 
    Delegates.observable(init) { prop, _, new ->
        println("${prop.name} = $new")
    }

val foo: Foo by printDelegate(Foo())
val bar: Bar by printDelegate(Bar())
票数 19
EN

Stack Overflow用户

发布于 2018-07-17 16:59:44

Delegates.observable通常在安卓系统中使用。一种这样的情况是添加文本更改侦听器。

示例

代码语言:javascript
复制
interface TextChangedListener {
    fun onTextChanged(newText: String)
}

class PrintingTextChangedListener : TextChangedListener {
    override fun onTextChanged(newText: String) = println("Text is changed to: $newText")
}

class TextView {

    var listener: TextChangedListener? = null

    var text: String by Delegates.observable("") { prop, old, new ->
        listener?.onTextChanged(new)
    }
}

使用

代码语言:javascript
复制
val textView = TextView()
textView.listener = PrintingTextChangedListener()
textView.text = "Lorem ipsum"
textView.text = "dolor sit amet"

输出

文本更改为: Lorem ipsum

文本更改为: dolor sit amet

你可以在这里阅读更多的模式:https://github.com/dbacinski/Design-Patterns-In-Kotlin

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49960549

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档