1. 變量常量與類(lèi)型
聲明變量
常用類(lèi)型
變量類(lèi)型
例:
查看字節(jié)碼
雙擊Shift --> 輸入 show kotlin bytecode
類(lèi)型推斷
例:
引用類(lèi)型和基本類(lèi)型
例:
2. 條件語(yǔ)句
range表達(dá)式
例:
左閉右開(kāi)區(qū)間若皱,也可以這樣使用
when表達(dá)式
例:
String模版
例:
3. 函數(shù)
函數(shù)頭
例:
函數(shù)參數(shù)
例:
Unit函數(shù)
例:
Nothing類(lèi)型
例:
反引號(hào)函數(shù)
例:
匿名函數(shù)
例:
匿名函數(shù)類(lèi)型與隱式返回
例:
匿名函數(shù)參數(shù)
例:
it關(guān)鍵字
例:
匿名函數(shù)類(lèi)型推斷
例:
lambda
函數(shù)的參數(shù)是另一個(gè)函數(shù)
例:
簡(jiǎn)略寫(xiě)法
函數(shù)內(nèi)聯(lián)
例:
函數(shù)引用
例:
函數(shù)類(lèi)型作為返回類(lèi)型
例:
閉包
Lambda與匿名內(nèi)部類(lèi)
4. 操作符
Kotlin可空性
例:
安全調(diào)用操作符
例:
使用let的安全調(diào)用
例:
非空斷言操作符
例:
空合并操作符
例:
異常處理
例:
先決條件函數(shù)
例:
5. 字符串操作
SubString
例:
Split
例:
Replace
例:
字符串比較
例:
字符串遍歷
例:
6. 數(shù)字類(lèi)型
數(shù)字類(lèi)型安全轉(zhuǎn)換
例:
Double轉(zhuǎn)Int
7. 標(biāo)準(zhǔn)庫(kù)函數(shù)
apply
例:
let
例:
run
例:
with
also
例:
takeIf
例:
takeUnless
例:
8. 集合
List創(chuàng)建與獲取元素
例:
可變List集合
例:
mutator函數(shù)
例:
List集合遍歷
例:
解構(gòu)語(yǔ)法過(guò)濾元素
例:
Set創(chuàng)建與獲取元素
例:
可變Set集合
例:
集合轉(zhuǎn)換與快捷函數(shù)
例:
數(shù)組類(lèi)型
例:
Map集合
例:
讀取Map的值
例:
遍歷Map
例:
可變Map集合
例:
9. 類(lèi)
定義類(lèi)和field屬性
例:
計(jì)算屬性與防范競(jìng)態(tài)條件
主構(gòu)造函數(shù)
構(gòu)造函數(shù)里定義屬性
例:
次構(gòu)造函數(shù)
例:
默認(rèn)參數(shù)
初始化塊
例:
初始化順序
例:
延遲初始化LateInit
例:
惰性初始化by lazy
例:
初始化陷阱一
例:
初始化陷阱二
例:
初始化陷阱三
例:
10. 繼承
open關(guān)鍵字
例:
類(lèi)型轉(zhuǎn)換is和as
例:
智能類(lèi)型轉(zhuǎn)換
例:
Any超類(lèi)
例:
11. 對(duì)象
對(duì)象聲明
例:
對(duì)象表達(dá)式
例:
伴生對(duì)象
例:
12. 類(lèi)
嵌套類(lèi)
數(shù)據(jù)類(lèi)
例:
copy函數(shù)
例:
解構(gòu)聲明
例:
運(yùn)算符重載
例:
枚舉類(lèi)
例:
枚舉類(lèi)定義函數(shù)
例:
代數(shù)數(shù)據(jù)類(lèi)型
例:
密封類(lèi)
例:
13. 接口和抽象類(lèi)
接口
例:
接口的默認(rèn)實(shí)現(xiàn)
例:
抽象類(lèi)
例:
14. 泛型
泛型類(lèi)
例:
泛型函數(shù)
例:
多泛型參數(shù)
例:
泛型類(lèi)型約束
例:
vararg關(guān)鍵字
例:
[]操作符與get函數(shù)重載
例:
out協(xié)變芽隆、in逆變淤翔、invariant不變
通配符 "?"
例:
//out
interface Production<out T>{
fun product() : T
}
//in
interface Consumer<in T>{
fun consume(item : T)
}
//invariant
interface ProductionConsumer<T>{
fun product() : T
fun consume(item : T)
}
open class Food
open class FastFood : Food()
class Burger : FastFood()
//生產(chǎn)者
class FoodStore : Production<Food>{
override fun product(): Food {
println("Produce food")
return Food()
}
}
class FastFoodStore : Production<FastFood>{
override fun product(): FastFood {
println("Produce food")
return FastFood()
}
}
class BurgerStore : Production<Burger>{
override fun product(): Burger {
println("Produce food")
return Burger()
}
}
class Everybody() : Consumer<Food>{
override fun consume(item: Food) {
println("Eat food")
}
}
class ModernPeople : Consumer<FastFood>{
override fun consume(item: FastFood) {
println("Eat fastFood")
}
}
class America : Consumer<Burger>{
override fun consume(item: Burger) {
println("Eat burger")
}
}
fun main() {
var production1 : Production<Food> = FoodStore()
//out使得下面不報(bào)錯(cuò)
var production2 : Production<Food> = FastFoodStore()
var production3 : Production<Food> = BurgerStore()
var consumer3 : Consumer<Burger> = America()
//in使得下面不報(bào)錯(cuò)
var consumer1 : Consumer<Burger> = Everybody()
var consumer2 : Consumer<Burger> = ModernPeople()
}
如何使用out和in
reified關(guān)鍵字
例:
class MagicBox<T : Human>(){
//隨機(jī)產(chǎn)生一個(gè)對(duì)象,如果不是指定類(lèi)型就調(diào)用備份函數(shù)產(chǎn)生一個(gè)
// fun <T> randomOrBackup(backup: () -> T) : T{
// val items = listOf(
// Boy("Jack", 20),
// Man("John",35)
// )
//
// val random = items.shuffled().first()
// return if(random is T){
// random
// }else{
// backup()
// }
// }
//reified關(guān)鍵字要和內(nèi)聯(lián)一起使用,保存泛型類(lèi)型不被擦除
inline fun <reified T> randomOrBackup(backup: () -> T) : T{
val items = listOf(
Boy("Jack", 20),
Man("John",35)
)
val random = items.shuffled().first()
println(random)
return if(random is T){
random
}else{
backup()
}
}
}
open class Human(val age : Int)
class Boy(val name : String, age : Int) : Human(age){
override fun toString(): String {
return "Boy(name='$name', age='$age')"
}
}
class Man(val name : String, age : Int) : Human(age){
override fun toString(): String {
return "Man(name='$name', age='$age')"
}
}
fun main() {
val box1 : MagicBox<Man> = MagicBox()
val subject = box1.randomOrBackup {
Man("Jimmy", 38)
}
println(subject)
}
15. 擴(kuò)展函數(shù)
定義擴(kuò)展函數(shù)
例:
超類(lèi)上定義擴(kuò)展函數(shù)
例:
泛型擴(kuò)展函數(shù)
例:
擴(kuò)展屬性
例:
可空類(lèi)擴(kuò)展
例:
infix關(guān)鍵字
例:
定義擴(kuò)展文件
例:
重命名擴(kuò)展
例:
apply函數(shù)原理
DSL
16. 函數(shù)式編程
定義
函數(shù)類(lèi)別
變換函數(shù)map
例:
變換函數(shù)flapMap
例:
過(guò)濾函數(shù)filter
例:
合并函數(shù)zip
例:
合并函數(shù)fold
例:
為何使用函數(shù)式編程
17. 序列
產(chǎn)生序列
使用序列產(chǎn)生素?cái)?shù)
例:
18. 互操作與可空性
例:
類(lèi)型映射
例:
屬性訪問(wèn)
19. 交互注解
@JvmName
例:
@JvmField
例:
@JvmOverloads
例:
@JvmStatic
例:
Throws
例:
函數(shù)類(lèi)型操作
例:
20. 全完整工程已上傳
Github:https://github.com/huliwei-afk/KotlinProj