前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kotlin中的扩展

Kotlin中的扩展

作者头像
对话、
发布2022-02-22 14:30:30
1.1K0
发布2022-02-22 14:30:30
举报
文章被收录于专栏:Android-XjAndroid-Xj

Kotlin 中的 扩展 到底是什么?

简单使用:
  • 扩展函数
代码语言:javascript
复制
//要扩展哪个类中的方法,被扩展的类名就是哪个
fun 被扩展的类名.扩展函数名(..参数..){
函数体
}
例如:

在Array中扩展一个元素交换的方法

代码语言:javascript
复制
fun Array<Int>.swap(pos1: Int, pos2: Int) {
//this表示当前数组本身
val tmp = this[pos1]
this[pos1] = this[pos2]
this[pos2] = tmp
}
高级点用法:
  • 使用 T 标记泛型

改写上面的扩展函数

代码语言:javascript
复制
fun <T> Array<T>.swap(pos1: Int, pos2: Int) {
val tmp = this[pos1]
this[pos1] = this[pos2]
this[pos2] = tmp
}

之前的扩展方法,只适用于Array ,现在适用于 Double、Float等类型

  • 扩展高阶函数
例子:一个求数组元素中最大值 扩展Array 类
代码语言:javascript
复制
fun <T> Array<T>.maxCustomize(greater: (T, T) -> Boolean): T? {
var max: T? = null
//this表示 Array<T>本身
for (item in this)
if (max == null || greater(item, max))
max = item
return max
}

看到这里是不是很简单,那么到底什么是扩展呢?

Kotlin 的扩展是一个很独特的功能, Java 本身并不支持扩展, Kotlin 为了让扩展能在JVM平台上运行,必须做一些独特的处理

Kotiin 支持扩展方法和扩展属性

扩展的实现机制

Java 是一 门静态语言。一个类被定义完成之后,程序无法动态地为该类增加、 删除成员( field、方法等),除非开发者重新编辑该类的源代码,并重新编译该类。 但现在 Kotlin 的扩展却好像可以动态地为一个类增加新的方法,而且不需要重新修改该 类的源代码,那 Kotlin 扩展的实际情况是怎样的呢?难道 Kotlin 可以突破 NM 的限制? 实际上, Kotlin 的扩展并没有真正地修改所扩展的类,被扩展的类还是原来的类,没有任 何改变。 Kotiin 扩展的本质就是定义了 一个函数,当程序用对象调用扩展方法时, Kotlin 在编 译时会执行静态解析一一就是根据调用对象、方法名找到扩展函数,转换为函数调用

扩展的作用主要有两个方面

  • 扩展可动态地为己有的类添加方法或属性 。
  • 扩展能以更好的形式组织一些工具方法 。
扩展是一种非常灵活的动态机制,它既不需要使用继承,也不需要使用类似于装饰者的任何设计模式,即可为现有的类增加功能,因此使用非常方便。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简单使用:
    • 例如:
    • 高级点用法:
      • 例子:一个求数组元素中最大值 扩展Array 类
        • 扩展是一种非常灵活的动态机制,它既不需要使用继承,也不需要使用类似于装饰者的任何设计模式,即可为现有的类增加功能,因此使用非常方便。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档