前置知识: Kotlin

扩展函数的编译原理

1 minAdvanced2026/6/14

Kotlin扩展函数编译原理详解。

1. 扩展函数本质

fun String.addExclamation(): String = this + "!"

编译为静态方法:

public static final String addExclamation(String receiver) {
    return receiver + "!";
}

2. 关键特性

2.1 不修改原

扩展函数是静态解析的,不会真正修改被扩展的

2.2 静态分发

open class Animal
class Dog : Animal()

fun Animal.sound() = "Generic"
fun Dog.sound() = "Woof"

val animal: Animal = Dog()
animal.sound()  // "Generic" — 静态分发,看声明类型

2.3 不能访问私有成员

扩展函数不能访问的 private 成员,因为它本质上是外部静态方法。

3. 与成员函数冲突

class Foo {
    fun bar() = "member"
}

fun Foo.bar() = "extension"

Foo().bar()  // "member" — 成员函数优先