Kotlin學(xué)習(xí)筆記:概述
Kotlin學(xué)習(xí)筆記:基本語法和函數(shù)
Kotlin學(xué)習(xí)筆記:類和接口
Kotlin學(xué)習(xí)筆記:lambda編程
Kotlin學(xué)習(xí)筆記:類型系統(tǒng)
Kotlin學(xué)習(xí)筆記:泛型
Kotlin學(xué)習(xí)筆記:注解和反射
- 變量
val str = "hello" // val修飾的變量是不可變的揖盘,相當(dāng)于java的final變量
var count = 12 // var修飾的變量 是可變的
- when表達(dá)式代替switch語句
fun getMnemonic(color: Color) =
when (color) {
Color.RED -> "Richard"
Color.ORANGE -> "Of"
Color.YELLOW -> "York"
Color.GREEN -> "Gave"
Color.BLUE -> "Battle"
Color.INDIGO -> "In"
Color.VIOLET -> "Vain"
}
>>> println(getMnemonic(Color.BLUE))
Battle
- if() else是表達(dá)式。說明if() else 可以作為賦值給變量违施,也可以作為返回值。
fun main(args: Array<String>) {
val name = if (args.size > 0) args[0] else "Kotlin"
println("Hello, $name!")
}
函數(shù)
聲明函數(shù)的語法
Kotlin也有與Java相對應(yīng)的main函數(shù)法精,定義方式如下
fun main(args: Array<String>) {
println("hello Kotlin")
}
參數(shù)
- 命名參數(shù)
- 支持默認(rèn)參數(shù)值
假如需要寫一個在list列表中將元素用分隔符分割并打印以String類型打印的功能。
一般情況下矩乐,可以這樣寫璧函。
fun <T>joinToString(collection: Collection<T>,
separator: String,
prefix: String,
suffix: String): String{
val result = StringBuilder(prefix)
for((index, element) in collection.withIndex()) {
if (index >0) result.append(separator)
result.append(element)
}
result.append(suffix)
return result.toString()
}
為了解決過度重載的問題,可以使用默認(rèn)參數(shù)值勋桶。
fun <T>joinToString(collection: Collection<T>,
separator: String=",",
prefix: String="",
suffix: String=""): String{
val result = StringBuilder(prefix)
for((index, element) in collection.withIndex()) {
if (index >0) result.append(separator)
result.append(element)
}
result.append(suffix)
return result.toString()
}
可以使用以下方式調(diào)用
joinToString(list)
joinToString(list, ";")
頂層函數(shù)
在Java中經(jīng)常會用到一些工具類脱衙,這些工具類中往往都是靜態(tài)方法,沒有類的實例對象例驹,例如Jdk中的Collections類捐韩,以及我們自己定義的一些放在util包下的工具類。在Kotlin中鹃锈,完全不需要這些類荤胁。Kotlin引入了頂層函數(shù),可以替代靜態(tài)類仪召。
那么如何定義頂層函數(shù)呢寨蹋?
創(chuàng)建一個Kotlin文件,然后將函數(shù)添加進(jìn)去即可扔茅。以joinToString為例已旧,
fun <T>joinToString(...): String{
....
}
等價于
/* Java */
package strings;
public class JoinKt {
public static String joinToString(...) { ... }
}
擴(kuò)展函數(shù)
定義:函數(shù)定義在類的外部,但可以像調(diào)用該類的成員函數(shù)一樣調(diào)用
- 擴(kuò)展函數(shù)的語法
接收者類型:要擴(kuò)展類或接口的名稱召娜,放到要添加的函數(shù)前运褪。
接收者對象:用來調(diào)用擴(kuò)展函數(shù)的對象
- 擴(kuò)展函數(shù)如何調(diào)用及優(yōu)點(diǎn)
擴(kuò)展函數(shù)可以在不更改原來類的情況下,對類的方法進(jìn)行拓展玖瘸。擴(kuò)展函數(shù)可以像被擴(kuò)展類的方法一樣調(diào)用秸讹。
舉例來講,自定義一個String類的擴(kuò)展函數(shù)lastChar雅倒,該函數(shù)可以取字符串的最后一個字符璃诀。
fun String.lastChar(): Char = get(length-1)
在Kotlin代碼中調(diào)用
import com.nxiangbo.kotlin_learning.function.lastChar
"str".lastChar()
在Java代碼中調(diào)用
import com.nxiangbo.kotlin_learning.function.FunctionLearnKt;
public class FunctionTest {
public void Test(){
FunctionLearnKt.lastChar("str");
}
}
- 擴(kuò)展函數(shù)能做什么
在Kotlin標(biāo)準(zhǔn)庫中,大量使用擴(kuò)展函數(shù)蔑匣。例如劣欢,String等