首发于公众号: DSGtalk1989
13.基础操作符run、with、let、also、apply
-
T.run和run
对象的
run
方法,在方法体中的最后一行可以做返回值,且方法体中的this
代表对象本身的引用。val str: String = "Boss" val result = str.run { print(this) // 参数 69 //区间返回值 }
直接使用
run
方法,其实就是class
本身调用的run
,所以this
指向的是class
。val str: String = "Boss" val result : Int = run { print(this) // 参数 this@class 69 //区间返回值 }
-
T.let
跟
run
方法一样,也会返回最后一样的值。不同的是引用对象T
用的是it
而不是this
,一般这种情况下,之所以使用it
不使用this
是由于this
用来表示外面的类class
了val str: String = "Boss" val result : Int = str.let { print(it) // 参数 print(this) // this@class 69 //区间返回值 }
let还有一个比较牛逼的地方,可以用作对null的安全过滤,?.let调用当出现null的时候将不会运行let的方法
val listWithNulls: List<String?> = listOf("Kotlin", null) for (item in listWithNulls) { //此处不会打印出null,只会打印出null item?.let { println(it) } }
-
T.also
跟上面两个方法不同的是,返回对象本身,即不管我们在方法体中做任何操作,在方法体的最后一行返回任何东西,都是返回的
T
。同时方法体中也是用it
来代表对象本身,this
代表类class
,跟上面的let
唯一不同的就是let
最终返回的方法体最后一行,而also
放回的是对象本身val str: String = "Boss" val result : String = str.also { print(it) // 参数 print(this) // this@class 69 //区间返回值 }
-
T.apply
使用
this
,不用it
。并且返回对象本身。val str: String = "Boss" val result : String = str.apply { print(this) // 参数 69 //区间返回值 }
-
with(T)
可以理解成也是
class
调的方法,跟run
方法不同的是,run
方法中this
代表的是类class
,而with
的this
代表的是T
。同时返回的是方法体的最后一行val result1 : Int = with(str) { print(this) // 接收者 69 //区间返回值 }
-
总结
- 要么只能用
this
代表自己,要么就是it
代表自己,this
代表对象所在类 -
also
,apply
返回对象本身,let
,run
返回方法体最后一行。 -
let
和also
有this
有it
,apply
和run
只有it
不用去强记,IDE自带提醒和报错,久而久之,自然会记得。
- 要么只能用
Kotlin学习笔记之 13 基础操作符run、with、let、also、apply