一、標準函數with、run、apply
標準函數是指在Standard.kt文件中定義的函數,任何的Kotlin代碼都可以自由的調用。
我們之前在[Kotlin基礎(8)-->空指針檢查(https://www.jianshu.com/p/3c1b53b239bf)已經學習了let標準函數,主要作用就是配合?.操作符來進行輔助判空處理,這裏就不再贅述了。
1.with函數
定義:with函數接收兩個參數,第一個可以是任意類型的對象,第二個是lambda表達式。with函數會在lambda表達式中提供第一個參數的上下文,並使用lambda表達式中的最後一行代碼最爲返回值返回
作用:可以在連續調用同一個對象的多個方法時讓代碼變得更加精簡
例子:
原始代碼:
val list = listOf("Apple", "banana", "orange")
var builder = StringBuilder()
builder.append("start eat \n")
for (i in list) {
builder.append("$i,\n")
}
builder.append("finish")
val result = builder.toString()
print(result)
使用with函數
val list = listOf("Apple", "banana", "orange")
val result= with(StringBuilder()){
append("start eat \n")
for (i in list) {
append("$i,\n")
}
append("finish")
toString()
}
print(result)
2.run函數
run函數使用場景和with十分相似。
區別是:(1)run函數是不能直接調用的,一定要調用某個對象的run函數纔行。(2)run函數只接受一個lambda參數。
例子:
val result = StringBuilder().run {
append("start eat \n")
for (i in list) {
append("$i,\n")
}
append("finish")
toString()
}
print(result)
3.apply函數
apply函數用法和run十分相似。
區別是:apply函數無法返回指定返回值,而是會自動返回調用對象本身
例子:
val list = listOf("Apple", "banana", "orange")
val result = StringBuilder().apply {
append("start eat \n")
for (i in list) {
append("$i,\n")
}
append("finish")
}
print(result.toString())
3.repeat函數
repeat函數允許你傳入一個數值n,之後會把lambda表達式中的內容執行n遍。例:
repeat(3){
print("Hi")
}
//輸出日誌:Hi Hi Hi
二、定義靜態方法
靜態方法又叫做類方法,指的是那種不需要創建實例就可以調用的方法。
Java中,只要在方法前聲明static關鍵字就是靜態方法。
Kotlin中並沒有直接定義的靜態方法的關鍵字,但是提供了一些語法特性來支持類似於靜態方法調用的寫法,基本可以滿足我們平時的需求了。
1.companion object
這個關鍵字實際上會在Util類的內部創建一個伴生類,而action2()方法就是定義在這個伴生類的實例方法。
Kotlin會保證Util類始終只會存在一個伴生類對象。調用Util.action2()方法實際上是調用了Util半身類對象的action2()方法。
class Util {
fun action1() {}
companion object {
fun action2() {}
}
}
調用
fun test() {
Util.action2()
}
2.定義靜態方法
Kotlin提供了兩種實現方式,註解和頂層方法
1.@JvmStatic註解
@JvmStatic註解只能加在單例類或者companion object中的方法上,如果加在一個普通方法上,會提示語法錯誤。例:
companion object {
@JvmStatic
fun action2() {}
}
如此,Kotlin編譯器就會將這些方法編譯成真正的靜態方法。
2.頂層方法
頂層方法指的是那些沒有定義在任何類中的方法。
Kotlin編譯器會將所有的頂層方法全部編譯爲靜態方法。
定義一個頂層方法,就是創建一個Kotlin文件,類型選擇File。命名。
比如現在定義了一個文件名爲Helper.kt,裏面有doSomeThing()方法。Kotlin編譯器還會自動創建一個叫HelperKt的Java類。
如何調用頂層方法呢?
在Kotlin中:直接調用doSomeThing()方法。
在Java中:HelperKt.doSomeThing()
二、常量
定義常量的關鍵字是const
注意:只有在單例類、companion object或頂層方法中,纔可以使用const關鍵字