首發於公衆號: 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自帶提醒和報錯,長此以往,天然會記得。