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