MST

星途 面试题库

面试题:Kotlin中委托属性的基本原理及简单应用

请简述Kotlin委托属性的基本原理,并举例说明如何使用委托属性来实现一个可观察的属性。
13.0万 热度难度
编程语言Kotlin

知识考点

AI 面试

面试题答案

一键面试

Kotlin委托属性基本原理

Kotlin委托属性是一种语法糖,它允许将属性的getter和setter方法的实现委托给另一个对象,称为委托。其基本原理基于by关键字,当使用by声明一个委托属性时,Kotlin编译器会自动生成属性访问器(getter和setter)的代码,并将实际的属性操作转发给委托对象。委托对象需要实现ReadOnlyProperty(对于只读属性)或ReadWriteProperty(对于读写属性)接口。

实现可观察属性示例

  1. 定义委托类
import kotlin.properties.ReadWriteProperty
import kotlin.reflect.KProperty

class ObservableProperty<T>(
    private val initialValue: T,
    private val onChange: (T, T) -> Unit
) : ReadWriteProperty<Any?, T> {
    private var value = initialValue

    override fun getValue(thisRef: Any?, property: KProperty<*>): T {
        return value
    }

    override fun setValue(thisRef: Any?, property: KProperty<*>, newValue: T) {
        val oldValue = value
        value = newValue
        onChange(oldValue, newValue)
    }
}
  1. 使用委托属性
class User {
    var name: String by ObservableProperty("default name") { old, new ->
        println("Name changed from $old to $new")
    }
}

fun main() {
    val user = User()
    user.name = "John"
}

在上述示例中,User类的name属性通过ObservableProperty委托实现可观察功能。每次name属性值发生变化时,都会调用onChange回调函数并打印出属性值的变化情况。