Kotlin 进阶用法:扩展

越来越多的Android开发者开始使用kotlin了,最近项目中也需要用到,于是就对kotlin中一些有趣的用法进行了记录。

扩展

Kotlin的扩展包括了扩展函数和扩展属性。 扩展能够向已经存在的类中添加新的函数或属性,也包含第三方库或者SDK中的类。

扩展函数

那我们一般在什么场景下需要用到扩展函数呢,最常见的就是我们平时实现的各种Util工具类。通过扩展函数,我们可以直接在对应的类上 进行扩展。举个实际的例子,我们对Context类进行扩展。

fun Context.toast(message: CharSequence, duration: Int = Toast.LENGTH_SHORT) {
    Toast.makeText(this, message, duration).show()
}

这样,我们就可以在持有Context的地方直接调用toast了,例如Activity中。

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
      super.onCreate(savedInstanceState)
      setContentView(R.layout.activity_main)
      toast("test")
    }
}

p.s 我们的扩展函数定义在什么地方呢?直接创建一个文件,然后写fun就可以了,注意是文件,不是类。外面不需要再包一层。

扩展函数的实质

其实,扩展函数实质上并没有改变原来的类,它只是创建了一个静态方法。 所以,我们在Java中如何调用kotlin的扩展函数呢?以上面的扩展函数为例,在java中这样调用(ExtenalFunctionKt是扩展函数所在的文件名):

ExtenalFunctionKt.toast(context,"test");

扩展属性

与扩展函数类似,kotlin也可以扩展属性。

我们看一个例子,用扩展属性来设置View的padLeft属性:

var View.padLeft: Int
  get() {
      return paddingLeft
  }
  set(value) {
      setPadding(value, paddingTop, paddingRight, paddingBottom)
  }

以上是基于已有的属性进行一些封装,如果我们想添加新的属性呢?因为扩展属性实际上不会向类添加新的成员,所以我们无法直接创建一个新成员, 但我们可以通过其它方法来实现这样的效果,例如借助SharePreference,(例子中setSpString,getSpString是对Context建立的扩展函数,用来往SP存取数据):

var Context.member: String
  get() {
      return getSpString("member")
  }
  set(value) {
      setSpString("member",value)
  }

拜拜

本文分享自微信公众号 - Android每日一讲(gh_f053f29083b9)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-11-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Android小菜鸡

Kotlin与Java语法对比(首次了解)

15720
来自专栏一个会写诗的程序员的博客

在 IDEA 中快速输入 main 函数:m, psvm

33540
来自专栏一个会写诗的程序员的博客

Kotlin生态调查结果出炉:超过6成的开发者用过Kotlin了Kotlin 开发者社区

Kotlin 整体的发展速度还是让不少开发者为之兴奋。同时鉴于 JetBrains 和Google 的大力支持,以及开发者社区的热捧,我们也相信它会越来越流行。...

10820
来自专栏一个会写诗的程序员的博客

Overview of Kotlin & Comparison Between Kotlin and Java

Reading Time: 10 Minutes by Navdeep Singh Gill

10650
来自专栏即时通讯技术

微信团队分享:Kotlin渐被认可,Android版微信的技术尝鲜之旅

本文由微信开发团队工程是由“oneliang”原创发表于WeMobileDev公众号,内容稍有改动。

31810
来自专栏一个会写诗的程序员的博客

Kotlin 中的接口 Interface : so much betterKotlin 开发者社区

Interface was introduced in Java as a new programming feature. It describes CAN-...

15250
来自专栏一个会写诗的程序员的博客

今天Kotlin 1.3正式发布:支持协程和多平台组件Kotlin 开发者社区

今天,Kotlin 官方博客正式发布了 Kotlin 1.3,还附带了一些开源库、构建工具和学习资源。

12020
来自专栏Android相关

Kotlin---使用AndroidStudio配置Kotlin环境

使用Android Studio 3.0,并且在Android Studio中创建或者导入一个Project

20820
来自专栏一个会写诗的程序员的博客

Kotlin 中的集合类排序Kotlin 开发者社区

Kotlin使用扩展方法构建在Java Collection框架之上。这大大提高了可用性和可读性,而无需第三方依赖,如Apache Commons或Guava。

26350
来自专栏一个会写诗的程序员的博客

Kotlin 函数式编程之 Lambda 与 高阶函数《Kotlin 极简教程》Kotlin 开发者社区

12230

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励