看标题就知道介绍两个东西,扩展函数和扩展属性。这个两个东西Java中没有,Kotlin拥有。两者对我们开发程序非常有帮助,让我们的代码更加简洁,更加易懂。
扩展方法
我们看下anko这个也是jetbrains开发的库中是怎么来写扩展方法
/**
* Display the simple Toast message with the [Toast.LENGTH_SHORT] duration.
*
* @param message the message text resource.
*/
fun Context.toast(message: Int) = Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
扩张方法很普通用法不同就是加了个类名。表示这个方法是那个类的方法。我们知道在Java语言中,要给一个类加个方法只能继承这个类。Kotlin能够很简单的给类价格方法。toast扩展方法表示这个方法类Context的,那么toast方法可以访问Context类的所有成员。
我们可以这样在一个Activtiy中使用这个扩张方法
toast("hello world")
比用Utils代码更简单。
fun ImageView.loadImage(url: String) {
Glide.with(context).load(url).into(this)
}
上面是给ImageView添加一个扩展方法,这样我们加载图片就更加简单了,代码更加简洁。
扩展属性
我们知道一个类除了有方法,还有属性。Kotlin也可以在一个类中新添加一个属性。
val View.ctx: Context
get() = context
上面是我们给一个View类添加一个属性cxt。其实这个属性就是View中的context成员变量。就是一个简写。
var TextView.textColor: Int
get() = currentTextColor
set(v) = setTextColor(v)
自定义属性要重新属性的getter和setter。上面代码中currentTextColor变量和setTextColor方法都是类TextView中的成员变量和成员方法。