MST

星途 面试题库

面试题:Kotlin中委托模式的基本实现方式

请简述在Kotlin中如何通过委托模式实现代码复用,并举一个简单的示例代码说明,例如委托属性的使用场景及代码实现。
30.5万 热度难度
编程语言Kotlin

知识考点

AI 面试

面试题答案

一键面试

委托模式在Kotlin中实现代码复用的方式

在Kotlin中,委托模式通过by关键字实现代码复用。委托模式允许一个对象将部分功能委托给另一个对象来处理。这种方式使得代码结构更加清晰,提高了代码的可维护性和复用性。

委托属性的使用场景及代码实现

  1. 使用场景:当多个类需要共享相同的属性逻辑,或者希望在属性访问时添加额外的逻辑(如缓存、日志记录等)时,可以使用委托属性。
  2. 代码示例
class User {
    var name: String by Delegates.notNull()
}

fun main() {
    val user = User()
    // 这里如果不先给name赋值就访问会抛出异常,因为name是notNull委托属性
    user.name = "John"
    println(user.name)
}

// 自定义委托属性示例
class MyDelegate {
    private var value: String = ""
    operator fun getValue(thisRef: Any?, property: kotlin.reflect.KProperty<*>): String {
        println("Getting value of ${property.name}")
        return value
    }
    operator fun setValue(thisRef: Any?, property: kotlin.reflect.KProperty<*>, value: String) {
        println("Setting value of ${property.name}")
        this.value = value
    }
}

class MyClass {
    var myProperty: String by MyDelegate()
}

在上述代码中,User类的name属性使用了Delegates.notNull()委托,确保name在使用前必须被赋值。MyClass中的myProperty使用了自定义的MyDelegate,在属性访问和赋值时添加了打印日志的额外逻辑。