Android kotlin 详解(4)

最近,有很多盆友问我:“委托怎么玩?”。所以这边博客,我们就来讲讲委托。

在开讲之前,我先讲讲我的学习心得。其实,IT行业的许多术语都来自生活,比如:“委托”。什么叫做委托,就是自己不做交给别人做呗。那反应到编程当中,其实也是这样。个人觉得编程学的越久,越会觉得:“学的就是一种思维,一种模式,以及返璞归真学基础”。

废话不多说了,我们继续来看博客。

一.类委托

看名字就知道了,就是委托给一个类,再说通俗点,就是你可以用这个委托类中的公共函数.
看例子:

interface  BaseKotlin {
    fun printInfo(x :String) {};
     fun allInfo(x :String) {};
}

----------------------------------------
class BaseImpl:BaseKotlin {

    override fun printInfo(x:String){
        println("========== $x")
    }

    fun myFavorite(){
        println("===我的爱好是=== wash one's feet")
    }
}

-----------------------------------------
//将 b 保存在 DeviceImpl的对象实例内部,而且编译器将会生成继承自 BaseKotlin接口的所有方法, 并将调用转发给 b。 
class DeviceImpl(var b: BaseKotlin) : BaseKotlin by b{

    fun disPlay(){
        println("===========jimTrency")
        b.allInfo("jimTrency");
    }
}

下面就是调用了:

    var baseImpl=BaseImpl();
    var deviceImpl=DeviceImpl(baseImpl);
    //通过委托,调用的是baseImpl.printInfo()
    deviceImpl.printInfo("28-30");
    //调用的是自己的disPlay()函数
    deviceImpl.disPlay();

    //deviceImpl.myFavorite() //不能调用,是委托给BaseKotlin的对象,而不是BaseImpl

二.属性委托

属性委托指的是一个类的某个属性值不是在类中直接进行定义,而是将其托付给一个代理类,从而实现对该类的属性统一管理。

属性委托语法格式:

val/var <属性名>: <类型> by <表达式>

by 关键字之后的表达式就是委托, 属性的 get() 方法(以及set() 方法)将被委托给这个对象的 getValue() 和 setValue() 方法。属性委托不必实现任何接口, 但必须提供 getValue() 函数(对于 var属性,还需要 setValue() 函数)。

例子如下:

这里写图片描述

输出结果为:

这里写图片描述

三.标准委托

lazy() 是一个函数, 接受一个 Lambda 表达式作为参数, 返回一个 Lazy 实例的函数,返回的实例可以作为实现延迟属性的委托: 第一次调用 get() 会执行已传递给 lazy() 的 lamda 表达式并记录结果(表达式的最后一句,最为记录结果), 后续调用 get() 只是返回记录的结果。

这里写图片描述

上面的输出结果为什么是这样呢?为什么第一次执行,执行两次输出表达式?

其实上面已经说了原因的,只是估计好多人看起来都蒙圈。第一次执行 println(lazyValue)时,先会执行lamda 表达式,结果就会打印出:“computed!”,而“Hello”做为表达式的最后一句,就会成为记录结果,接着在执行get()函数获得记录结果,打印出来。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值