在 Kotlin 中,委托机制具体指什么?请列举并说明其主要应用场景,包括类委托和属性委托。
考察说明
考查 Kotlin 委托机制的定义、分类及实际应用的理解。
回答思路
- 【回答框架 1】Kotlin 委托是一种设计模式,允许对象将某些操作委托给另一个对象处理。核心是通过 by 关键字实现,包括类委托和属性委托。
- 【回答框架 2】类委托:类通过 by 将接口实现委托给指定对象,编译器生成转发方法,减少样板代码,支持组合优于继承。例如,通过委托实现装饰者模式或代理模式。
- 【回答框架 3】属性委托:属性通过 by 将 getter/setter 逻辑委托给委托类,需实现 getValue/setValue 操作符。常见标准委托包括 lazy、observable、vetoable 等。
- 【回答框架 4】lazy 委托用于延迟初始化,首次访问时执行初始化表达式并缓存结果,适合耗时资源。observable 用于监听属性变化,vetoable 可在赋值前拦截并决定是否接受新值。
- 【回答框架 5】实际应用时,属性委托常用于配置管理、数据绑定、校验逻辑等,类委托用于实现接口的默认实现或动态扩展。选择时需考虑委托对象的生命周期和线程安全性。
- 【关键点 1】委托通过 by 关键字实现,包括类委托和属性委托。
- 【关键点 2】类委托将接口实现转发给指定对象,支持组合优于继承。
- 【关键点 3】属性委托依赖 getValue/setValue 操作符,标准委托有 lazy、observable、vetoable 等。
- 【关键点 4】lazy 实现延迟初始化,observable 监听变化,vetoable 可拦截赋值。
- 【关键点 5】委托可以减少样板代码,但注意线程安全和委托对象生命周期。
- 【易错点 1】混淆类委托和属性委托,类委托是接口实现转发,属性委托是访问器委托。
- 【易错点 2】lazy 默认线程安全模式为 synchronized,在多线程下可能影响性能,需根据场景选择模式。
- 【易错点 3】vetoable 中修改属性值可能导致递归,需避免在 lambda 中直接赋值。