首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

kotlin小知识系列2-懒加载和代理

懒加载

kotlin懒加载有两种方式,lateinit var 和 lazy。

lateinit var懒加载初始化

lateinit var 懒加载方式,有几点需要注意

需要手动初始化,但是可以初始化多次,也就是该值可以改变

只能用于不可null的对象,不能为primitives(Int、Float之类)类型

同时我个人觉得也会带来一些好处

对于类似android的activity而言,某些在初始化的时候不能确定该值,只有在某些特定方法调用的时候才可以确定值的情况下,才能进行其初始化。常见onCreate初始化

对于第一点而言,可以有效的避免?号或者!!的大量使用影响阅读或者强迫证的人

这两点优势,我个人觉得还是很不错的。下面的例子

lazy初始化方法

Lazy是一个接口,lazy是一个方法,返回一个Lazy对象。kotlin默认已经实现了常用的Lazy对象。lazy只能修饰val类型

lazy方法是真正的懒加载方法,它要使用者提供初始化过程,在第一次调用的时候会进行初始化。lazy所有的内容都Layz.kt里。

系统默认有三个Lazy的实现类。具体可以看下代码。

这里有个疑问,默认的lazy 方法只会进行一次的初始化,但是这个是系统实现的,如果自己实现Lazy接口呢?是否可以根据其他不同的变量返回不同的值呢?看下例子

~通过结果可以看出,是可以实现出不同的对象。所以说虽然user是val类型,但是可以改变其值的

代理ReadWriteProperty

属性代理,从抽象来说,就是hook属性的get和set方法,加入自身需要的逻辑和内容。一个很好的实践例子就是两个view的显示的状态跟随某个boolean变量切换。

省略部分代码

上面例子中,trueView和falseView的显示和隐藏会随着status变量的改变而改变。

整个代理看起来,有点像databinding,vue和react的状态机。例如还可以设置个String类型的content变量,绑定到一个textView中。

结束

kotlin的代理机制和懒加载机制是kotlin比较常用的技术,尤其是代理,应该多加的练习和实践,可以创造出很多有意思的东西

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180912G0LGVI00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券