扩展函数

本文介绍了Kotlin扩展函数,它能在类上增加新行为,即使无类代码访问权限。与Java的static方法工具类相比,调用时无需传入整个对象。扩展函数并非真正修改原类,以静态导入实现效果。还提及了其在onCreateViewHolder、加载图片等场景的应用,以及函数和属性扩展、操作符使用。

扩展函数

扩展函数数是指在一个类上增加一种新的行为,甚至我们没有这个类代码的访问权限。这是一个在缺少有用函数的类上扩展的方法,Kotlin能够为我们做到那些令人关注的事情,而这些Java做不到。

在Java中,通常会实现很多带有static方法的工具类,而Kotlin中扩展函数的一个优势是我们不需要在调用方法的时候把整个对象当作参数传入,它表现得就像是属于这个类的一样,而且我们可以使用this关键字和调用所有public方法。

有一点值得注意:

扩展函数并不是真正地修改了原来的类,它的这些作用效果是以静态导入的方式来实现的。扩展函数可以被声明在任何文件中,因此有个通用的方式是把一系列有关的函数放在一个新建的文件里,就像我们刚才所说的工具类当中。

在 onCreateViewHolder 中的使用

第一个是我们在 RecyclerView 中的适配器中用到的例子,正常情况下我们这样使用:

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
    val v = LayoutInflater.from(parent.context).inflate(R.layout.view_item, parent, false)
    return ViewHolder(v)
}

● 在加载图片的时候使用

如果你使用过 Picasso 加载图片的话,那真是再好不过了,而且你会发现你也可以用相同的方法给 ImageView 增加一个扩展函数:

fun ImageView.loadUrl(url: String) {
    Picasso.with(context).load(url).into(this)
}

函数的扩展

扩展函数也可以是一个属性,所以我们可以通过相似的方法来扩展属性。我们知道Kotlin由于互操作性的特性已经提供了getter、setter这个属性,但是我们任然通过下面的例子来展示一下使用自己的getter/setter生成一个属性的方式,因为这很有助于理解扩展属性背后的思想:

public var TextView.text: CharSequence
    get() = getText()
    set(v) = setText(v)

扩展函数中的操作符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值