扩展函数
扩展函数数是指在一个类上增加一种新的行为,甚至我们没有这个类代码的访问权限。这是一个在缺少有用函数的类上扩展的方法,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)