Kotlin实用技巧
三月 01, 2022
version 0.1
前言:
现在主力语言已经完全迁移至Kotlin,日常除了维护老的一些业务模块外,基本全都是Kotlin了。我认为Kotlin是一门偏向生产,提高码字效率的语言。很多时候Kotlin便捷的语法糖能给编程带来更丝滑的体验,但Kotlin依旧有很多的语法糖并不是那么的想当然。这些语法糖多数时候是很甜的,但也可能导致一些不好排查的问题,所以打算写一篇记录一下。
集合越界判空
1 | val list = emptyList<String>() |
之前真有过,刚接触的时候乍一看没什么问题啊,无脑?
就行。结果遇到集合这种还是要判断越界的,那么又if-else
,这时候用getOrNull()
代替
1 | public fun <T> List<T>.getOrNull(index: Int): T? { |
inline noinline crossline
首先写两个方法,打印日志 其中doSomethingElse
是一个被嵌套在doSomething
中的Unit
类型
1 | fun doSomething() { |
然后传统的crossline
做法优化嵌套我们都知道, 但有的时候还真不能随便加.
当嵌套的方法有类似return之类的返回时要格外注意:
1 | fun doSomething() { |
在不看字节码情况下,这个return
的作用到底会产生什么后果的确是个容易忽略的点,要知道return
的作用范围.这段代码的字节码如下?:
1 | public void doSomething() { |
可以看到,并没有end
的打印输出后续.
这个时候就要加入crossinline
来配合,避免”非本地返回”
1 | inline fun doSomethingElse(crossinline abc: () -> Unit) { |
@JvmOverload注解
其实没有太多好说,只是很多时候利于旧代码模块在调用新的类方法时候可以简化一些东西,安卓中其中一个常用场景在自定义view中可以省略很多:
1 | class CustomView constructor( |
更新日志:
版本 | 时间 | 说明 |
---|---|---|
version 0.1 | 2022年04月11日 | 初版整理 |
查看评论