kotlin中新增扩展函数功能的原因解析
在 Kotlin 中,扩展函数的本质是「不修改原有类代码,为其新增功能」,这源自编程中「开闭原则」(对扩展开放,对修改关闭)的第一性原理。
- 核心需求:当需要给第三方库的类(如 Android 的
TextView)或已有的类添加方法时,直接修改原类代码既不安全也不现实(可能破坏原有逻辑或无法修改闭源类)。 - 解决方案:Kotlin 允许在类外部声明一个带类名前缀的函数,让这个函数「看起来像属于该类」,从而实现功能扩展。
通俗类比:
把原有类比作「手机」,扩展函数就像「手机壳」:
- 手机(类)出厂时没有挂绳孔(原有方法),但可以通过安装带挂绳孔的手机壳(扩展函数),让手机具备挂绳功能,而无需拆开手机修改内部结构。
- 所有同型号手机(类的实例)都能使用这个手机壳(扩展函数),就像所有
String类型的变量都能调用String的扩展函数一样。
关键特性:
语法本质:
扩展函数以类名.函数名形式声明,例如给String类添加一个计算单词数的方法:fun String.countWords(): Int { // "String." 表示这是 String 类的扩展函数 return split(" ").size } // 调用方式:就像调用原生方法一样 "Hello Kotlin".countWords() // 输出:2
这本质是静态绑定(编译时确定调用哪个函数),而非动态继承,因此不具备多态性。
不修改原有类:
扩展函数不会真正修改类的字节码,只是在编译时让编译器「认为」该函数属于目标类。例如给Animal类和子类Dog分别添加扩展函数name(),调用时仍按静态类型解析,而非根据实例类型动态判断。适用场景:
- 给第三方库类(如
RecyclerView)添加便捷方法,避免创建工具类。 - 为基础类型(如
Int、String)增加业务相关功能,提升代码可读性。
- 给第三方库类(如
为什么不通过继承实现?
继承需要创建子类(如 MyString extends String),但很多类(如 String)是 final 无法继承,且继承会增加类层级复杂度。扩展函数以更轻量的方式实现功能扩展,符合「最小改变原则」。
总结:扩展函数是 Kotlin 对「开闭原则」的实践,通过「语法糖」让类在不被修改的前提下获得新功能,就像给现有工具加装配件,既保持原有功能稳定,又能灵活扩展。
到此这篇关于kotlin中新增扩展函数功能的原因解析的文章就介绍到这了,更多相关kotlin新增扩展函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Android开发中RecyclerView模仿探探左右滑动布局功能
本文给大家分享android开发中RecyclerView模仿探探左右滑动布局功能,非常不错,具有参考借鉴价值,需要的朋友参考下2017-01-01
Android使用CardView作为RecyclerView的Item并实现拖拽和左滑删除
这篇文章主要介绍了Android使用CardView作为RecyclerView的Item并实现拖拽和左滑删除,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2017-11-11
Android Studio实现带三角函数对数运算功能的高级计算器
这篇文章主要为大家详细介绍了Android Studio实现带三角函数对数运算功能的高级计算器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2022-05-05
Android仿淘宝头条基于TextView实现上下滚动通知效果
这篇文章主要介绍了Android TextView实现上下滚动通知效果,需要的朋友可以参考下2017-03-03
Flutter获取ListView当前正在显示的Widget信息(应用场景)
ListView是Flutter里最常用的Widget了,当屏幕放不下的时候,它可以自带滚动功能,用法也很简单,本文通过实例代码给大家介绍Flutter获取ListView当前正在显示的Widget信息,感兴趣的朋友一起看看吧2022-05-05


最新评论