科特林:覆盖 setter

Kotlin: Override setter

我有一个摘要 class 包含以下 属性

var items: List<I> = listOf()
    set(value) {
        field = value
        onDataChanged()
    }

在我的扩展 class 中,我现在想覆盖 items 的 setter 以在调用上述 setter 代码之前执行其他操作。这可能吗,如果可以,怎么做?

您必须在 parent class

中将您的字段声明为 open
open var items: List<I> = listOf()
    set(value) {
        field = value
        onDataChanged()
    }

并且在您的 child class 中您将其覆盖为:

override var items: List<Int>
    get() = super.items
    set(value) {
        super.items = value
        //Your code
    }

通过这种方式,您实际上是在创建一个没有支持字段的 属性,而您只是访问真实的 parent 的 items 字段。