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

Kotlin 进阶用法:扩展

作者头像
PhoenixZheng
发布2018-12-13 17:43:03
6720
发布2018-12-13 17:43:03
举报

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

扩展

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

扩展函数

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

代码语言:javascript
复制
fun Context.toast(message: CharSequence, duration: Int = Toast.LENGTH_SHORT) {
    Toast.makeText(this, message, duration).show()
}

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

代码语言:javascript
复制
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是扩展函数所在的文件名):

代码语言:javascript
复制
ExtenalFunctionKt.toast(context,"test");
扩展属性

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

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

代码语言:javascript
复制
var View.padLeft: Int
  get() {
      return paddingLeft
  }
  set(value) {
      setPadding(value, paddingTop, paddingRight, paddingBottom)
  }

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

代码语言:javascript
复制
var Context.member: String
  get() {
      return getSpString("member")
  }
  set(value) {
      setSpString("member",value)
  }

拜拜

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-11-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Android每日一讲 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 扩展
    • 扩展函数
      • 扩展函数的实质
        • 扩展属性
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档