Kotlin 面试题
目录

Kotlin 中什么是委托 (Delegation)?

· 约 3 分钟读完 · 第 89 / 200 章

推荐答案

在 Kotlin 中,委托(Delegation)是一种设计模式,允许一个对象将某些操作或属性的实现委托给另一个对象。Kotlin 通过 by 关键字支持类委托和属性委托。

类委托

类委托允许一个类将其部分或全部功能委托给另一个类的实例。通过这种方式,可以实现代码复用和接口的实现。

属性委托

属性委托允许将属性的 getter 和 setter 方法委托给另一个对象。Kotlin 标准库中提供了 lazy、observable 等常用的委托属性。

本题详细解读

类委托

类委托的核心思想是通过组合而不是继承来实现代码复用。在 Kotlin 中,使用 by 关键字可以将一个类的接口实现委托给另一个类的实例。这种方式可以避免继承带来的复杂性,同时保持代码的简洁和可维护性。

在上面的例子中,Derived 类将 Base 接口的实现委托给了 BaseImpl 类的实例 b。因此,Derived 类可以直接调用 b 的 print 方法。

属性委托

属性委托允许将属性的访问逻辑委托给另一个对象。Kotlin 标准库提供了多种内置的委托属性,如 lazy、observable、vetoable 等。

  • lazy:延迟初始化属性,只有在第一次访问时才会计算值。
  • observable:在属性值发生变化时触发回调。
  • vetoable:在属性值发生变化前进行验证,可以阻止无效的赋值。

在上面的例子中,User 类的 name 属性使用了 observable 委托,当 name 的值发生变化时,会自动触发回调函数并输出变化信息。

通过委托,Kotlin 提供了一种灵活且强大的方式来管理类的行为和属性的访问逻辑,使得代码更加模块化和可维护。