面试题答案
一键面试Kotlin委托属性基本原理
Kotlin委托属性是一种语法糖,它允许将属性的getter和setter方法的实现委托给另一个对象,称为委托。其基本原理基于by
关键字,当使用by
声明一个委托属性时,Kotlin编译器会自动生成属性访问器(getter和setter)的代码,并将实际的属性操作转发给委托对象。委托对象需要实现ReadOnlyProperty
(对于只读属性)或ReadWriteProperty
(对于读写属性)接口。
实现可观察属性示例
- 定义委托类
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)
}
}
- 使用委托属性
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
回调函数并打印出属性值的变化情况。