kotlin进阶之路

Kotlin 进阶之路之Extension

2017-07-26  本文已影响106人  IMSk

今天来讲一讲Kotlin中另外一神器,extension,虽然其实没有这个关键字,但却是一个离不开的利器。之前的文章也已经有介绍了的《我与 Kotlin 的爱恨情仇之浅谈 Extensions》

什么是 extension ?

学一样东西,都是从字面来理解含义,那么extension顾名思义即扩展的意思,他与extend完全不同,extend是继承派生出新的类以达到新功能。
extension 是在不改动原来的类的基础上进行扩展。

如何使用?

extension 用法可以参考官方文档 https://kotlinlang.org/docs/reference/extensions.html

这里只举个列子:

//给 MutableList<Int> 扩展一个swap方法
fun MutableList<Int>.swap(index1: Int, index2: Int) {
    val tmp = this[index1] // 'this' corresponds to the list
    this[index1] = this[index2]
    this[index2] = tmp
}

//使用swap方法
val l = mutableListOf(1, 2, 3)
l.swap(0, 2) // 'this' inside 'swap()' will hold the value of 'l'

Kotlin 如何实现 extension ?

�我们可以看一下编译出来的jar:

  public static final void swap(List<Integer> $receiver, int index1, int index2)
  {
    Intrinsics.checkParameterIsNotNull($receiver, "$receiver");int tmp = ((Number)$receiver.get(index1)).intValue();
    $receiver.set(index1, $receiver.get(index2));
    $receiver.set(index2, Integer.valueOf(tmp));
  }
  

ok,可以看出来,Kotlin 的extension 其实最终是生成了静态方法。这也接受了为什么 extension 为什么不能给类追加变量,而只能以追加方法的形式。

我们平时工作中又能做什么呢?

比如我们�可以对activity/view进行扩展,实现findViewById,可以对imageView进行扩展,实现图片加载,那么我们在加载的�图片的时候就很方便了的,比如imageview.load(url)即可,而不是像之前那样要写类似这样的ImageLoader.shared().load(imageview,url)繁琐的代码了的。

上一篇 下一篇

猜你喜欢

热点阅读