https://www.jianshu.com/p/b0cfa50b6fde
Lambda 是一个表达式,也可以说它是一个匿名函数。
lambda 是 jdk1.8 之后支持的特性, 而 kotlin 是直接支持的. 其作用在我看来就是节省代码的.
难度嘛. 看两个例子就基本懂了, android studio 3.0 之后也会代码变灰提示, 自动转换.
省掉不必要的声明, 达到节省代码量的目的.
image.png
image.png
image.png
java 和 kotlin 在 lambda 的使用上还是有点区别的, 区别不大
大致都是:
- v(参数),v1(参数)... -> v.方法()
括号使用不一样而已.
1.kotlin 的 Lambda 的另外一种运用:
kotlin 的参数是可以直接声明匿名函数的。
image.png
- 变量名: (参数: 参数类型) - >返回值
上面的代码传入了一个匿名没有返回值的方法.
1.
- fun a(function: (num: Int) - >Unit)
传入一个匿名的没有返回值的方法.
2. 在 a() 中调用了
匿名方法. 然后传入参数 1
- (function: (num: Int) - >Unit)
3. 在 b 函数里面, 调用了 a 方法. 并且传入匿名函数
- { num -> print(num) } 声明参数num,然后打印num.
4. 运行结果: 1
image.png
如图, 在 java 中, 调中这类方法. 会要求返回 Unit.INSTANCE.
是不是觉的有点恼火. 还要去写个返回值.
java 支持自动识别接口. 但是对 kotlin 的这种写法就不感冒了.
这里使用 rxjava2 的 Observer 做例子
- open abstract class TestObserver<T>(private val c: Consumer<T>) : Observer<T> {
- /**
- * 兼容java
- */
- constructor(c: (t: T) -> Unit) : this(Consumer { t -> c(t) })
- }
image.png
image.png
- 官方的说法: Kotlin本身已经有了函数类型和高阶函数等支持,所以不需要了再去转换了。
您的喜欢与回复是我最大的动力-_-
交流群: 493180098
来源: http://www.jianshu.com/p/b0cfa50b6fde