![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Kotlin笔记
Mr_Fingerling
这个作者很懒,什么都没留下…
展开
-
Kotlin的sealed与enum
与enum的对比:enum适合用来表示状态,因为状态无论何时,全局只有一个,而sealed适合用来表示类似指令,这种全局同一时间可能存在多个的情况。sealed类似于枚举,其规定了子类的种类的限制,当子类可以有多个实例时,定义为class,否则定义为object(enum:实例可数,sealed:子类可数)。sealed的子类当不需要保存状态时,即所有的实例都保有相同的状态时用object,如果同一种子类需要原创 2017-11-13 12:32:09 · 1417 阅读 · 0 评论 -
Kotlin的扩展属性和扩展方法
扩展方法的原理Kotlin 中类的扩展方法并不是在原类的内部进行拓展,通过反编译为Java代码,可以发现,其原理是使用装饰模式, 对源类实例的操作和包装,其实际相当于我们在Java中定义的工具类方法,并且该工具类方法是使用调用者为第一个参数 的,然后在工具方法中操作该调用者;该调用者在Kotlin中使用this关键字表示;比如:定义一个String的操作符函数,其中的this表示调用者本身;f原创 2017-11-15 11:52:40 · 3921 阅读 · 0 评论 -
Kotlin内联:noinline与crossinline
非局部返回一个函数中,如果存在一个lambda表达式,在该lambda中不支持直接进行return退出该函数,比如:fun outterFun() { innerFun { //return //错误,不支持直接return //只支持通过标签,返回innerFun return@innerFun } //如果是匿名或者具名函数原创 2017-11-20 17:58:27 · 11121 阅读 · 4 评论 -
Kotlin代理之属性代理
属性代理属性代理实际就是将属性的值的设置(set)和获取(get)的流程交给了其他的对象代理,相当于为原对象增加了一个backing field(理解为存储值的内存),变量的实际值一般被保存在代理对象中;var与val设置代理对于var变量,要求代理必须实现getValue和setValue操作符方法,而val只需要实现getValue;比如常用的lazy代理,只能用在val常量上: val原创 2017-11-16 18:19:38 · 822 阅读 · 0 评论 -
接口代理
在实现接口时,我们可以通过by代理,将另一个实现接口的类的实例作为当前的接口实现,也就是把另一个接口实现类作为默认的实现;class MyListener : Transition.TransitionListener by EmptyTransitionListener { override fun onTransitionStart(transition: Transition) {原创 2017-11-16 18:29:23 · 1123 阅读 · 0 评论