白话kotlin:有意思的拓展

作者: linheimx | 来源:发表于2017-06-20 14:17 被阅读273次

    什么是拓展?

    一个类是由方法和字段组成的,现在我要给这个类加个方法或者字段,这就是拓展。

    拓展的好处:
    我是一个普通的人,只有手脚,只能走路。现在给我拓展一下吧:安装一双翅膀,
    ok,那我这下牛逼了,我会飞了。

    同一个道理,在代码中,将现有的类增强一下,这个类将获得额外的功能,变得牛逼起来了。

    如何加呢?

    • 方式1: 修改原有类的代码,随意的添加方法或者字段
    • 方式2: 通过继承的方式,让其子类添加
    • 方式3: 通过装饰器

    以上方式都可以实现增强现有类的功能,但是都有不少的缺点:编码麻烦,入侵现有的代码。
    在kotlin中可以很方便的进行拓展,如下:

    拓展方法(函数):

    将一个类,添加一个方法

    类名.方法名

    例子:

    拓展:



    调用:


    拓展属性

    将一个类,添加一个属性

    类名.属性

    例子:

    拓展:



    调用:


    关于拓展的奇思妙想

    场景1
    我们常常会在应用程序中,弹出个toast,来提示用户。
    我们在activity里面这样写:

    Toast.makeText(this, "hello", Toast.LENGTH_SHORT).show()
    

    我们只关注弹出的信息,这样写,最简单:

    toast("hello")
    

    ok,给activity写一个拓展函数就可以啦:

    fun Activity.toast(message: CharSequence) = Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
    

    我们常见的toast,各种dialog什么的,我们以前的java代码都能实现,
    但是我们写了太多的繁琐代码,
    我们可以通过拓展函数,将这些代码模板化,
    变成一个简单的方法,拓展至activity或者fragment中,极大的简化了开发的姿势,嘿嘿。

    场景2
    我们常用imageview加载图片,同样少不了一堆模板代码,
    尝试用下拓展方法:

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

    这样直接调用imgeview.load()方法,岂不是非常直观简单?

    白话kotlin系列

    1. 白话kotlin:向空指针异常说再见
    2. 白话kotlin:lambda表达式和高阶函数是什么玩意?
    3. 白话kotlin:内联函数助你提升运行效率
    4. 白话kotlin:用协程来愉快的处理异步问题
    5. 白话kotlin:有意思的拓展
    6. 白话kotlin:简单的理解 关键词object

    相关文章

      网友评论

        本文标题:白话kotlin:有意思的拓展

        本文链接:https://www.haomeiwen.com/subject/oedoqxtx.html