ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

第085篇 类委托 by:装饰器模式的一行实现

第085篇 类委托 by:装饰器模式的一行实现 类委托by是 Kotlin 里最省样板代码的语法糖——一句话把"手写装饰器"变成"一行声明"。但它有明确的适用边界与两个容易踩的坑。面试里问"类委托怎么实现的",考的是你知道编译器生成了什么,而不是"你会用by"。先把结论放在前面:class Derived(b: Base) : Base by b让编译器生成每个接口方法的转发实现——每一个Base的方法都编译成b.方法名(参数)。所以类委托在实现层面等价于手写装饰器,零运行时魔法、零反射。关键限制是:只能委托接口(interface)或抽象类的抽象方法,不能委托具体类的具体方法——因为具体类的方法有实现,委托不会覆盖它。机制拆解看编译产物就一目了然。给定:interface Logger { fun log(msg: String); fun level(): Int } class ConsoleLogger : Logger { override fun log(msg: String) { } ; override fun level() = 0 } class Service(private val delegate: Logger) : Logger by delegate编译器为Service生成两个方法:log(msg) { delegate.lo
返回列表