面试题答案
一键面试委托模式在Kotlin中实现代码复用的方式
在Kotlin中,委托模式通过by
关键字实现代码复用。委托模式允许一个对象将部分功能委托给另一个对象来处理。这种方式使得代码结构更加清晰,提高了代码的可维护性和复用性。
委托属性的使用场景及代码实现
- 使用场景:当多个类需要共享相同的属性逻辑,或者希望在属性访问时添加额外的逻辑(如缓存、日志记录等)时,可以使用委托属性。
- 代码示例:
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
,在属性访问和赋值时添加了打印日志的额外逻辑。