前言
之前寫過一篇Kotlin語法學習(上)https://blog.csdn.net/weixin_43615488/article/details/105952090,講述的是kotlin的基礎語法,這篇主要將kotlin的其他一些特性及用法
1. 標準函數with、run和apply
(1)with函數接收兩個參數,第一個參數可以是任意類型的對象,第二個參數是一個Lambda表達式。with函數會在Lambda表達式中提供第一個參數對象的上下文,並使用Lambda表達式的最後一行代碼作爲返回值返回
fun main(){
val list = listOf("Apple","Banana","Pear","Orange")
val result=with(StringBuilder()){
append("Start eating fruits.\n")
for(fruit in list){
append(fruit).append("\n")
}
append("Ate all fruits.")
toString()
}
println(result)
}
(2)run不能單獨使用,需要某個對象調用run,run函數只接收一個Lambda參數,並會在Lambda表達式中提供調用對象的上下文,並使用Lambda表達式的最後一行代碼作爲返回值返回,這點和with函數一樣
un main(){
val list = listOf("Apple","Banana","Pear","Orange")
val result=StringBuilder().run{
append("Start eating fruits.\n")
for(fruit in list){
append(fruit).append("\n")
}
append("Ate all fruits.")
toString()
}
println(result)
}
(3)apply函數和run類似,只是apply無法指定返回值,會自動返回對象本身
fun main(){
val list = listOf("Apple","Banana","Pear","Orange")
val result=StringBuilder().apply{
append("Start eating fruits.\n")
for(fruit in list){
append(fruit).append("\n")
}
append("Ate all fruits.")
}
println(result.toString())
}
2. 定義靜態方法
(1)使用單例類,單例類中的方法即類似靜態方法
object Util{
fun doAction(){
}
}
(2)用 companion object塊
class Util{
companion object{
fun doAction(){
}
}
}
(3)頂層方法:頂層方法指那些沒有定義在任何類中的方法,它們即是靜態方法
3. 延遲初始化
private lateinit var adapter: AbstractThreadedSyncAdapter
延遲初始化使用的是lateinit關鍵字,它可以告訴Kotlin編譯器,我會在晚些時候對這個變量進行初始化,所以就不用在一開始的時候將它賦值爲null了,也避免使用的時候用?.去進行判空處理
::adapter.isInitialized可用於判斷adapter變量是否已經初始化
4. 擴展函數
下面是實現String類的擴展函數lettersCount()
fun String.lettersCount():Int{
var count=0
for(char in this){
if(char.isLetter()){
count++
}
}
return count
}
除此之外,kotlin還有許多高級語法,像“密封類sealed class”、“運算符重載”、“高階函數”、“泛型”、“委託”、“協程”等