目录
Kotlin官方文档
Lambda 表达式 Any. (any: Any, ...) -> Any
-
什么是λ表达式
在Kotlin中,没有“代码块”的说法,所有{}都是λ表达式,方法也是一种特殊的λ表达式,只不过方法可以使用return语句,而λ表达式只有内联时才可以return
为什么说所有的{}都是λ表达式呢?λ表达式是对一段行为进行封装,那方法体、循环体不都是λ表达式吗 -
λ表达式的本质
Kotlin中的λ表达式是一个Function对象
Kotlin 如何优雅地解决命名空间冲突:使用as
关键字
Kotlin可以静态导入Java中的静态方法和静态字段,同时提供as
关键字用来提供其别名,以解决命名冲突
注意as
是可以别名任何的类和顶层函数和顶层变量的,所有的一切都可以重命名,简直就是C中的宏变量
as
关键字同时还是强制类型转换,遵循将类型置于变量名后的原则,同时减少了代码中括号,实在是优雅的设计
3 import logger as log
4 import java.lang.Thread.currentThread as cth
13 val conn = sock.accept()
14 Thread {
15 log.log("${ (conn.remoteSocketAddress as InetSocketAddress).let{ "${ it.address.hostAddress }:${ it.port }" } }", "${ cth().name } 新的客户端连接")
16 conn.close()
17 }.start()
容器Collection,持有对象
- 可迭代对象的forEach forEachIndexed扩展方法
forEach(lambda: (it: T) -> Unit)
forEach(lambda: (index: Int, value: T) -> Unit)
END