Kotlin 扩展函数与属性的深度解析
1. 扩展函数的底层原理
Kotlin 的扩展函数看似神奇,实则底层实现很简单。顶级扩展函数会被编译成一个静态函数,其第一个参数为接收者对象。例如,下面的 toast 函数:
// ContextExt.kt
fun Context.toast(text: String) {
Toast.makeText(this, text, LENGTH_LONG).show()
}
编译并反编译成 Java 后,类似如下函数:
//Java
public class ContextExtKt {
public static void toast(Context receiver, String text) {
Toast.makeText(receiver, text, Toast.LENGTH_SHORT).show();
}
}
这就是为什么我们可以在 Java 中使用 Kotlin 的扩展函数,如:
// Java
ContextExtKt.toast(context, "Some toast")
从 JVM 字节码的角度来看,方法并没有真正添加到类中,而是在编译时将所有扩展函数的使用都编译成静态函数调用。扩展函数和普通函数一样,可以使用函数修饰符
超级会员免费看
订阅专栏 解锁全文
22

被折叠的 条评论
为什么被折叠?



