第119篇 扩展属性与扩展伴生:工具方法的进阶形态
发布时间:2026/10/9 0:05:19 锦皓数字建站

扩展函数前面讲过(070 篇),这一节讲它的"孪生兄弟"——扩展属性,以及一个更冷门但很能区分基本功的话题:扩展伴生对象。这两个话题面试里问得不多,但一旦问了,能答上来的候选人很少,因为它触及"Kotlin 编译期到底做了什么"这一层。先把结论放在前面:扩展属性没有 backing field。它本质上是一个方法,每次访问都调用一次 getter;var形式的扩展属性则对应 getter + setter 一对方法。所以扩展属性不能保存状态,每次读都是一次计算——这是它与普通属性的根本差别。扩展伴生对象则是给"某个类的伴生对象"补扩展方法,语法上写作val Klass.CompanionName.func() {},用来给别人的类加静态方法而不用改动原类。机制背后的执行路径扩展属性的本质,看一段代码就清楚:class User(val name: String) // 扩展属性:只有访问器,没有字段 val User.displayName: String get() = "用户:$name" // 编译后是一个静态方法 displayName(User) // var 形式:一对访问器 var User.tag: String get() = storage.get(this) ?: "" set(value) { storage.put(this, value) }
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。