Setter没有要求Kotlin POJO

时间:2017-07-11 12:06:01

标签: android data-binding kotlin

我编写了一个简单的POJO(或POKO),并希望将其用于在Kotlin中编写的Android应用程序内的数据绑定。我的问题,没有调用setter中的代码。我希望在Console中看到Set value to <>。知道为什么没有发生这种情况吗?

这是我在try.kotlinlang.org中发布的代码:

fun main(args: Array<String>) {
    var myData = MyData()
    println(myData.helloWorldText)
    println(myData.helloWorldText)
    println(myData.helloWorldText)
    println(myData.helloWorldText)
}

class MyData {

    private val values = listOf<String>("Oh...", "Oh captain...", "Oh captain, my ...", "Oh captain, my captain...")

    private var i = -1

    var helloWorldText: String = ""
        get() = values[++i % values.size]
        set(value) {
            println("Set value to " + field)
        }
}

背景信息:稍后我想让我的POJO工具android.databinding.Observable并在设置器中调用registry.notifyChange(this, BR.helloWorldText)

1 个答案:

答案 0 :(得分:0)

代码从不调用setter,只调用getter。

感谢您提供有助于解决问题的评论。此代码按预期运行:

fun main(args: Array<String>) {
    var myData = MyData()
    println(myData.helloWorldText)

    myData.nextValuePlease()        
    println(myData.helloWorldText)
}

class MyData {

    private val values = listOf<String>("Oh...", "Oh captain...", "Oh captain, my ...", "Oh captain, my captain...")

    private var i = 0

    fun nextValuePlease() {
        i = ++i % values.size
        helloWorldText = helloWorldText
    }

    var helloWorldText: String
        get() = values[i]
        set(value) {
            println("Set value to \"" + value+"\"")
        }
}