kotlin扩展函数/变量

2017-06-22  本文已影响0人  李庆雪

通过给TextView设置文字可以知道,我们省略了getter,setter,和findviewbyid,本节继续介绍扩展函数.

函数扩展

一般来说,我们扩展一个类,需要去继承来实现,不过这样又要写N多代码,kotlin能让你的代码量大大减少!不信?快来跟我看看!

        Button button = findviewbyid(R.id.button)
        button.setOnClickListener(new View.OnClickListener() {
            @Override public void onClick(View v) {
                Toast.makeText(this,"hello java",Toast.LENGTH_SHORT);
            }
        });

经过编写java代码可以看出,你需要些很多代码,儿Kotlin只需要一行代码就可以搞定.

简单分析

button.setOnClickListener {
        v:View -> Toast.makeText(this,"hellolambda",Toast.LENGTH_SHORT).show()
}

如果lambda左值参数没有用到的话,是可以省略的,所以现在写成了

button.setOnClickListener {Toast.makeText(this,"hello lambda",Toast.LENGTH_SHORT).show()}
扩展函数

函数扩展可以让你对任意类进行扩展,而不用继承等等复杂的操作。
举个栗子!拿Toast来说,到处都可以用到,所以我们新建一个文件夹Extended,在里面新建一个Extended文件
里面写上如下代码:

fun Context.toast(message: String,length: Int = Toast.LENGTH_SHORT) = Toast.makeText(this,message,length).show()

对!没错,加了这句话,就可以在所有Context类型中使用toast这个函数了。
当然相信大家都有疑惑,那万一不在Context类型里面呢,我想弹出一个Toast怎么办呢?
大家不必惊慌,kotlin里面提供了包级函数,从此告别工具类

class App : Application() {
    override fun onCreate() {
        super.onCreate()
        context = this
    }
    companion object{
       lateinit var context: Context
    }
}
fun toast(message: String, length: Int = Toast.LENGTH_SHORT) = Toast.makeText(App.context,message,length).show()

这样就可以在任意地方调用Toast了

扩展变量
val Context.context
      get() = this

这样就可以在Context子类用扩展变量context了

val context
    get() = App.mContext //衔接上文中的自定义Application

这样就可以在用到Context的地方调用context变量了

上一篇 下一篇

猜你喜欢

热点阅读