
掃描右側(cè)圖片或微信搜索 “ Java技術(shù)分享屋 ” ,回復 “ 驗證碼 ” ,獲取驗證密碼。
本資料僅供讀者預覽及學習交流使用,不能用于商業(yè)用途,請在下載后24小時內(nèi)刪除。如果喜歡,請購買正版!
一.資料圖片
二.資料簡介
《Kotlin 實戰(zhàn)》將從語言的基本特性開始,逐漸覆蓋其更多的高級特性,尤其注重講解如何將 Koltin 集成到已有 Java 工程實踐及其背后的原理。本書分為兩個部分。第一部分講解如何開始使用 Kotlin 現(xiàn)有的庫和API,包括基本語法、擴展函數(shù)和擴展屬性、數(shù)據(jù)類和伴生對象、lambda 表達式,以及數(shù)據(jù)類型系統(tǒng)(著重講解了可空性和集合的概念)。第二部分教你如何使用 Kotlin 構(gòu)建自己的 API,以及一些深層次特性——約定和委托屬性、高階函數(shù)、泛型、注解和反射,以及領(lǐng)域特定語言的構(gòu)建?!禟otlin 實戰(zhàn)》適合廣大移動開發(fā)者及入門學習者,尤其是緊跟主流趨勢的前沿探索者。三.資料目錄
第 1 部分 Kotlin 簡介 11 Kotlin :定義和目的 3
1.1 Kotlin 初體驗 3
1.2 Kotlin 的主要特征4
1.2.1 目標平臺 :服務器端、Android 及任何 Java 運行的地方 4
1.2.2 靜態(tài)類型5
1.2.3 函數(shù)式和面向?qū)ο?6
1.2.4 免費并開源 7
1.3 Kotlin 應用8
1.3.1 服務器端的 Kotlin8
1.3.2 Android 上的 Kotlin 9
1.4 Kotlin 的設(shè)計哲學 10
1.4.1 務實10
1.4.2 簡潔 11
1.4.3 安全12
1.4.4 互操作性 13
1.5 使用 Kotlin 工具 14
1.5.1 編譯 Kotlin 代碼 14
1.5.2 IntelliJ IDEA 和 Android Studio 插件 15
1.5.3 交互式 shell15
1.5.4 Eclipse 插件 15
1.5.5 在線 playground 15
1.5.6 Java 到 Kotlin 的轉(zhuǎn)換器 16
1.6 小結(jié)16
2 Kotlin 基礎(chǔ) 17
2.1 基本要素 :函數(shù)和變量 17
2.1.1 Hello,world!18
2.1.2 函數(shù)18
2.1.3 變量20
2.1.4 更簡單的字符串格式化 :字符串模板 22
2.2 類和屬性 23
2.2.1 屬性24
2.2.2 自定義訪問器 25
2.2.3 Kotlin 源碼布局 :目錄和包26
2.3 表示和處理選擇 :枚舉和“when” 28
2.3.1 聲明枚舉類28
2.3.2 使用“when”處理枚舉類 29
2.3.3 在“when”結(jié)構(gòu)中使用任意對象 30
2.3.4 使用不帶參數(shù)的“when” 31
2.3.5 智能轉(zhuǎn)換 :合并類型檢查和轉(zhuǎn)換32
2.3.6 重構(gòu) :用“when”代替“if” 34
2.3.7 代碼塊作為“if”和“when”的分支 35
2.4 迭代事物 :“while”循環(huán)和“for”循環(huán) 36
2.4.1 “while”循環(huán)36
2.4.2 迭代數(shù)字 :區(qū)間和數(shù)列 37
2.4.3 迭代 map 38
2.4.4 使用“in”檢查集合和區(qū)間的成員39
2.5 Kotlin 中的異常 41
2.5.1 “try”“catch”和“finally” 41
2.5.2 “try”作為表達式 42
2.6 小結(jié)44
3 函數(shù)的定義與調(diào)用 45
3.1 在 Kotlin 中創(chuàng)建集合 45
3.2 讓函數(shù)更好調(diào)用 47
3.2.1 命名參數(shù) 48
3.2.2 默認參數(shù)值49
3.2.3 消除靜態(tài)工具類 :頂層函數(shù)和屬性 50
3.3 給別人的類添加方法 :擴展函數(shù)和屬性53
3.3.1 導入和擴展函數(shù) 54
3.3.2 從 Java 中調(diào)用擴展函數(shù)54
3.3.3 作為擴展函數(shù)的工具函數(shù)55
3.3.4 不可重寫的擴展函數(shù) 56
3.3.5 擴展屬性 58
3.4 處理集合 :可變參數(shù)、中綴調(diào)用和庫的支持 59
3.4.1 擴展 Java 集合的 API 59
3.4.2 可變參數(shù) :讓函數(shù)支持任意數(shù)量的參數(shù)60
3.4.3 鍵值對的處理 :中綴調(diào)用和解構(gòu)聲明 60
3.5 字符串和正則表達式的處理 62
3.5.1 分割字符串62
3.5.2 正則表達式和三重引號的字符串63
3.5.3 多行三重引號的字符串 64
3.6 讓你的代碼更整潔 :局部函數(shù)和擴展 66
3.7 小結(jié)68
4 類、對象和接口 69
4.1 定義類繼承結(jié)構(gòu) 70
4.1.1 Kotlin 中的接口 70
4.1.2 open、final 和 abstract 修飾符 :默認為 final72
4.1.3 可見性修飾符 :默認為 public 75
4.1.4 內(nèi)部類和嵌套類 :默認是嵌套類76
4.1.5 密封類 :定義受限的類繼承結(jié)構(gòu)79
4.2 聲明一個帶非默認構(gòu)造方法或?qū)傩缘念?0
4.2.1 初始化類 :主構(gòu)造方法和初始化語句塊80
4.2.2 構(gòu)造方法 :用不同的方式來初始化父類83
4.2.3 實現(xiàn)在接口中聲明的屬性85
4.2.4 通過 getter 或 setter 訪問支持字段 87
4.2.5 修改訪問器的可見性 88
4.3 編譯器生成的方法 :數(shù)據(jù)類和類委托 89
4.3.1 通用對象方法 89
4.3.2 數(shù)據(jù)類 :自動生成通用方法的實現(xiàn) 92
4.3.3 類委托 :使用“by”關(guān)鍵字 93
4.4 “object”關(guān)鍵字 :將聲明一個類與創(chuàng)建一個實例結(jié)合起來95
4.4.1 對象聲明 :創(chuàng)建單例易如反掌 95
4.4.2 伴生對象 :工廠方法和靜態(tài)成員的地盤98
4.4.3 作為普通對象使用的伴生對象 100
4.4.4 對象表達式 :改變寫法的匿名內(nèi)部類 102
4.5 小結(jié) 104
5 Lambda 編程 105
5.1 Lambda 表達式和成員引用 105
5.1.1 Lambda 簡介 :作為函數(shù)參數(shù)的代碼塊106
5.1.2 Lambda 和集合 107
5.1.3 Lambda 表達式的語法 108
5.1.4 在作用域中訪問變量 111
5.1.5 成員引用 114
5.2 集合的函數(shù)式 API 116
5.2.1 基礎(chǔ) :filter 和 map 116
5.2.2 “all”“any”“count”和“find”: 對集合應用判斷式 118
5.2.3 groupBy :把列表轉(zhuǎn)換成分組的 map 119
5.2.4 flatMap 和 flatten :處理嵌套集合中的元素120
5.3 惰性集合操作 :序列121
5.3.1 執(zhí)行序列操作 :中間和末端操作 123
5.3.2 創(chuàng)建序列 125
5.4 使用 Java 函數(shù)式接口 126
5.4.1 把 lambda 當作參數(shù)傳遞給 Java 方法127
5.4.2 SAM 構(gòu)造方法 :顯式地把 lambda 轉(zhuǎn)換成函數(shù)式接口 129
5.5 帶接收者的 lambda :“with”與“apply”131
5.5.1 “with”函數(shù)131
5.5.2 “apply”函數(shù) 133
5.6 小結(jié) 135
6 Kotlin 的類型系統(tǒng)137
6.1 可空性137
6.1.1 可空類型 138
6.1.2 類型的含義 140
6.1.3 安全調(diào)用運算符 :“?:”141
6.1.4 Elvis 運算符 :“?:” 143
6.1.5 安全轉(zhuǎn)換 :“as?” 145
6.1.6 非空斷言 :“!!”146
6.1.7 “l(fā)et”函數(shù)148
6.1.8 延遲初始化的屬性 149
6.1.9 可空類性的擴展 151
6.1.10 類型參數(shù)的可空性 153
6.1.11 可空性和 Java 153
6.2 基本數(shù)據(jù)類型和其他基本類型 157
6.2.1 基本數(shù)據(jù)類型 :Int、Boolean 及其他158
6.2.2 可空的基本數(shù)據(jù)類型 :Int?、Boolean? 及其他159
6.2.3 數(shù)字轉(zhuǎn)換 160
6.2.4 “Any”和“Any?”:根類型 162
6.2.5 Unit 類型 :Kotlin 的“void”163
6.2.6 Nothing 類型 :“這個函數(shù)永不返回” 164
6.3 集合與數(shù)組 164
6.3.1 可空性和集合165
6.3.2 只讀集合與可變集合167
6.3.3 Kotlin 集合和 Java 168
6.3.4 作為平臺類型的集合171
6.3.5 對象和基本數(shù)據(jù)類型的數(shù)組173
6.4 小結(jié) 175
第 2 部分 擁抱 Kotlin 177
7 運算符重載及其他約定179
7.1 重載算術(shù)運算符 180
7.1.1 重載二元算術(shù)運算 180
7.1.2 重載復合賦值運算符183
7.1.3 重載一元運算符 184
7.2 重載比較運算符 186
7.2.1 等號運算符 :“equals" 186
7.2.2 排序運算符 :compareTo187
7.3 集合與區(qū)間的約定 188
7.3.1 通過下標來訪問元素 :“get”和“set” 188
7.3.2 “in”的約定190
7.3.3 rangeTo 的約定 191
7.3.4 在“for”循環(huán)中使用“iterator”的約定 192
7.4 解構(gòu)聲明和組件函數(shù)193
7.4.1 解構(gòu)聲明和循環(huán) 194
7.5 重用屬性訪問的邏輯 :委托屬性 195
7.5.1 委托屬性的基本操作196
7.5.2 使用委托屬性 :惰性初始化和“by lazy()”197
7.5.3 實現(xiàn)委托屬性198
7.5.4 委托屬性的變換規(guī)則202
7.5.5 在 map 中保存屬性值 203
7.5.6 框架中的委托屬性 204
7.6 小結(jié) 205
8 高階函數(shù) :Lambda 作為形參和返回值 207
8.1 聲明高階函數(shù)207
8.1.1 函數(shù)類型 208
8.1.2 調(diào)用作為參數(shù)的函數(shù)209
8.1.3 在 Java 中使用函數(shù)類 211
8.1.4 函數(shù)類型的參數(shù)默認值和 null 值 212
8.1.5 返回函數(shù)的函數(shù) 214
8.1.6 通過 lambda 去除重復代碼 216
8.2 內(nèi)聯(lián)函數(shù) :消除 lambda 帶來的運行時開銷218
8.2.1 內(nèi)聯(lián)函數(shù)如何運作 219
8.2.2 內(nèi)聯(lián)函數(shù)的限制 221
8.2.3 內(nèi)聯(lián)集合操作222
8.2.4 決定何時將函數(shù)聲明成內(nèi)聯(lián)223
8.2.5 使用內(nèi)聯(lián) lambda 管理資源 223
8.3 高階函數(shù)中的控制流225
8.3.1 lambda 中的返回語句 :從一個封閉的函數(shù)返回225
8.3.2 從 lambda 返回 :使用標簽返回226
8.3.3 匿名函數(shù) :默認使用局部返回 228
8.4 小結(jié) 229
9 泛型 231
9.1 泛型類型參數(shù)232
9.1.1 泛型函數(shù)和屬性 232
9.1.2 聲明泛型類 234
9.1.3 類型參數(shù)約束235
9.1.4 讓類型形參非空 237
9.2 運行時的泛型 :擦除和實化類型參數(shù) 238
9.2.1 運行時的泛型 :類型檢查和轉(zhuǎn)換 238
9.2.2 聲明帶實化類型參數(shù)的函數(shù)241
9.2.3 使用實化類型參數(shù)代替類引用 243
9.2.4 實化類型參數(shù)的限制244
9.3 變型 :泛型和子類型化 245
9.3.1 為什么存在變型 :給函數(shù)傳遞實參245
9.3.2 類、類型和子類型 246
9.3.3 協(xié)變 :保留子類型化關(guān)系 248
9.3.4 逆變 :反轉(zhuǎn)子類型化關(guān)系 252
9.3.5 使用點變型 :在類型出現(xiàn)的地方指定變型254
9.3.6 星號投影 :使用 * 代替類型參數(shù) 257
9.4 小結(jié) 261
10 注解與反射 263
10.1 聲明并應用注解264
10.1.1 應用注解264
10.1.2 注解目標265
10.1.3 使用注解定制 JSON 序列化 267
10.1.4 聲明注解269
10.1.5 元注解 :控制如何處理一個注解 270
10.1.6 使用類做注解參數(shù) 271
10.1.7 使用泛型類做注解參數(shù)272
10.2 反射 :在運行時對 Kotlin 對象進行自省 273
10.2.1 Kotlin 反射 API :KClass、KCallable、KFunction 和KProperty 274
10.2.2 用反射實現(xiàn)對象序列化278
10.2.3 用注解定制序列化 279
10.2.4 JSON 解析和對象反序列化283
10.2.5 反序列化的最后一步 :callBy() 和使用反射創(chuàng)建對象 287
10.3 小結(jié) 291
11 DSL 構(gòu)建 293
11.1 從 API 到 DSL 293
11.1.1 領(lǐng)域特定語言的概念 295
11.1.2 內(nèi)部 DSL296
11.1.3 DSL 的結(jié)構(gòu) 297
11.1.4 使用內(nèi)部 DSL 構(gòu)建 HTML298
11.2 構(gòu)建結(jié)構(gòu)化的 API:DSL 中帶接收者的 lambda 299
11.2.1 帶接收者的 lambda 和擴展函數(shù)類型 299
11.2.2 在 HTML 構(gòu)建器中使用帶接收者的 lambda 303
11.2.3 Kotlin 構(gòu)建器 :促成抽象和重用307
11.3 使用“invoke”約定構(gòu)建更靈活的代碼塊嵌套 310
11.3.1 “invoke”約定 :像函數(shù)一樣可以調(diào)用的對象 310
11.3.2 “invoke”約定和函數(shù)式類型 311
11.3.3 DSL 中的“invoke”約定 :在 Gradle 中聲明依賴 312
11.4 實踐中的 Kotlin DSL 314
11.4.1 把中綴調(diào)用鏈接起來 :測試框架中的“should” 314
11.4.2 在基本數(shù)據(jù)類型上定義擴展 :處理日期 316
11.4.3 成員擴展函數(shù) :為 SQL 設(shè)計的內(nèi)部 DSL317
11.4.4 Anko :動態(tài)創(chuàng)建 Android UI 320
11.5 小結(jié) 322
A 構(gòu)建 Kotlin 項目 323
B Kotlin 代碼的文檔化 327
C Kotlin 生態(tài)系統(tǒng) 331