首发于公众号: DSGtalk1989安全
T.run和runapp
对象的run
方法,在方法体中的最后一行能够作返回值,且方法体中的this
表明对象自己的引用。post
val str: String = "Boss"
val result = str.run {
print(this) // 参数
69 //区间返回值
}
复制代码
直接使用run
方法,其实就是class
自己调用的run
,因此this
指向的是class
。ui
val str: String = "Boss"
val result : Int = run {
print(this) // 参数 this@class
69 //区间返回值
}
复制代码
T.letthis
跟run
方法同样,也会返回最后同样的值。不一样的是引用对象T
用的是it
而不是this
,通常这种状况下,之因此使用it
不使用this
是因为this
用来表示外面的类class
了spa
val str: String = "Boss"
val result : Int = str.let {
print(it) // 参数
print(this) // this@class
69 //区间返回值
}
复制代码
let还有一个比较牛逼的地方,能够用做对null的安全过滤,?.let调用当出现null的时候将不会运行let的方法3d
val listWithNulls: List<String?> = listOf("Kotlin", null)
for (item in listWithNulls) {
//此处不会打印出null,只会打印出null
item?.let { println(it) }
}
复制代码
T.alsocode
跟上面两个方法不一样的是,返回对象自己,即无论咱们在方法体中作任何操做,在方法体的最后一行返回任何东西,都是返回的T
。同时方法体中也是用it
来表明对象自己,this
表明类class
,跟上面的let
惟一不一样的就是let
最终返回的方法体最后一行,而also
放回的是对象自己cdn
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自带提醒和报错,长此以往,天然会记得。