Kotlin系列之let、with、run、apply、also函数的使用

简述:

相比Java, Kotlin提供了不少高级语法特性。对于一个Kotlin的初学者来说经常会写出一些不够优雅的代码。在Kotlin中的源码标准库(Standard.kt)中提供了一些Kotlin扩展的内置函数可以优化kotlin的编码。Standard.kt是Kotlin库的一部分,它定义了一些基本函数。 这个源代码文件虽然一共不到50行代码,但是这些函数功能都非常强大。
一、回调函数的Kotin的lambda的简化
在Kotlin中对Java中的一些的接口的回调做了一些优化,可以使用一个lambda函数来代替。可以简化写一些不必要的嵌套回调方法。但是需要注意:在lambda表达式,只支持单抽象方法模型,也就是说设计的接口里面只有一个抽象的方法,才符合lambda表达式的规则,多个回调方法不支持。

1、用Java代码实现一个接口的回调。
mView.setEventListener(new ExamPlanHomeEventListener(){

public void onSuccess(Data data){
  //todo
      }
 });

2、在Kotlin中的实现一个接口的回调,不使用lambda表达式(这种方式非常适用于kotlin中对于一个接口中含有多个回调方法。
mView.setEventListener(object: ExamPlanHomeEventListener{

public void onSuccess(Data data){
  //todo
}
 });

3、如果在Kotlin中的对于接口只有一个回调的方法,就符合使用lambda函数,我们可以把以上代码简化成这样。
mView.setEventListener({
data: Data ->
//todo
})

//或者可以直接省略Data,借助kotlin的智能类型推导

mView.setEventListener({
data ->
//todo
})
4、如果以上代码中的data参数没有使用到的话,可以直接把data去掉
mView.setEventListener({
//todo

})
5、以上代码还可以做个调整,由于setEventListener函数最后一个参数是一个函数的话,可以直接把括号的实现提到圆括号外面
mView.setEventListener(){
//todo
}
6、由于setEventListener这个函数只有一个参数,可以直接省略圆括号
mView.setEventListener{
//todo
}
二、内联扩展函数之let
let扩展函数的实际上是一个作用域函数,当你需要去定义一个变量在一个特定的作用域范围内,let函数的是一个不错的选择;let函数另一个作用就是可以避免写一些判断null的操作。
1、let函数的使用的一般结构
object.let{
it.todo()//在函数体内使用it替代object对象去访问其公有的属性和方法
...
}

//另一种用途 判断object为null的操作
object?.let{//表示object不为null的条件下,才会去执行let函数体
it.todo()
}
————————————————
版权声明:本文为CSDN博主「Geek Panda」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u013064109/java/article/details/78786646

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。