MST

星途 面试题库

面试题:Kotlin属性委托的基本实现

请用Kotlin代码实现一个简单的属性委托,用于将一个属性的值委托给另一个对象,并且说明委托类中需要实现哪些方法。
22.0万 热度难度
编程语言Kotlin

知识考点

AI 面试

面试题答案

一键面试
  1. Kotlin代码实现属性委托
class DelegateClass(val value: String)

class DelegatingClass {
    var delegatedProperty: String by Delegate()
}

class Delegate {
    private var delegate: DelegateClass? = null

    operator fun getValue(thisRef: Any?, property: kotlin.reflect.KProperty<*>): String {
        require(delegate != null) { "Delegate is not initialized" }
        return delegate!!.value
    }

    operator fun setValue(thisRef: Any?, property: kotlin.reflect.KProperty<*>, value: String) {
        if (delegate == null) {
            delegate = DelegateClass(value)
        } else {
            delegate!!.value = value
        }
    }
}
  1. 委托类中需要实现的方法
    • getValue(thisRef: Any?, property: KProperty<*>): T:用于获取委托属性的值。其中thisRef是委托属性所在的对象实例(在Kotlin中,thisRef在非扩展属性委托中可以是Any?,如果是扩展属性委托,thisRef就是扩展的对象类型),property包含委托属性的元数据,返回值T是委托属性的类型。
    • setValue(thisRef: Any?, property: KProperty<*>, value: T):用于设置委托属性的值。参数thisRefproperty含义同上,value是要设置的新值。这个方法只有在委托的属性是可变的(即使用var声明)时才需要实现。