舉報

會員
Kotlin編程實戰:創建優雅、富于表現力和高性能的JVM與Android應用程序
最新章節:
參考文獻
Kotlin是一種多范式編程語言。你可以用Kotlin編寫簡單的腳本、面向對象的代碼、函數式代碼,以及異步編程等。為了合理地涵蓋這一廣泛的主題,本書分為多個部分。第一部分主要介紹使用Kotlin編寫腳本。第二部分是關于面向對象編程的。在第三部分中,你將學習如何使用該語言的函數式風格的功能。第四部分將把目前為止所學的知識結合起來,使代碼更加流暢,并教會你如何創建內部領域特定語言(DSL)。在第五部分中,你將了解協程和異步編程。最后,第六部分涉及Java的互操作、測試、在Spring中使用Kotlin,以及使用Kotlin編寫Android應用程序。
最新章節
書友吧品牌:機械工業出版社
譯者:劉紅泉
上架時間:2021-06-09 14:55:37
出版社:機械工業出版社
本書數字版權由機械工業出版社提供,并由其授權上海閱文信息技術有限公司制作發行
- 參考文獻 更新時間:2021-06-09 14:59:39
- 附錄3 Kotlin到WebAssembly
- 附錄2 Kotlin/Native
- 附錄1 轉換為JavaScript
- 20.7 本章小結
- 20.6 查看應用程序的運行情況
- 20.5 更新RecyclerView
- 20.4 實施活動
- 20.3 創建布局
- 20.2 定義域對象
- 20.1 創建一個項目
- 第20章 使用Kotlin編寫Android應用程序
- 19.8 本章小結
- 19.7 繼續實踐
- 19.6 將服務與控制器集成
- 19.5 創建一個服務
- 19.4 創建一個存儲庫接口
- 19.3 創建一個實體類
- 19.2 創建一個控制器
- 19.1 創建一個Starter項目
- 第19章 使用Kotlin編寫Spring應用程序
- 18.12 本章小結
- 18.11 將應用程序用于驅動
- 18.10 查看代碼覆蓋率
- 18.9 與服務集成
- 18.8 測試協程和異步調用
- 18.7 測試頂級函數
- 18.6.2 測試解析數據
- 18.6.1 創建交互測試
- 18.6 模擬依賴項
- 18.5 編寫數據驅動的測試
- 18.4 編寫經驗測試
- 18.3 從Canary測試開始
- 18.2.2 設置Maven
- 18.2.1 設置Gradle
- 18.2 獲取項目文件
- 18.1 被測試的代碼
- 第18章 使用Kotlin進行單元測試
- 17.4 本章小結
- 17.3.7 更多注釋
- 17.3.6 訪問頂級函數
- 17.3.5 使用帶默認參數的函數
- 17.3.4 添加throws子句
- 17.3.3 傳遞lambda
- 17.3.2 創建靜態方法
- 17.3.1 使用Java中的重載運算符
- 17.3 從Java調用Kotlin
- 17.2 從Kotlin調用Java
- 17.1 聯合編譯
- 第17章 將Java與Kotlin混合使用
- 第六部分 互操作和測試
- 16.4 本章小結
- 16.3.5 編程時使用超時
- 16.3.4 監督作業
- 16.3.3 雙向取消
- 16.3.2 請勿打擾
- 16.3.1 取消協程
- 16.3 取消和超時
- 16.2.2 異步和異常
- 16.2.1 啟動和異常
- 16.2 異常處理
- 16.1.2 進行異步
- 16.1.1 按順序開始
- 16.1 非阻塞異步編程
- 第16章 異步編程
- 15.6 本章小結
- 15.5.2 使用iterator函數
- 15.5.1 使用序列
- 15.5 創建無限序列
- 15.4.2 看一眼延續
- 15.4.1 async和await
- 15.4 調試協程
- 15.3.4 修改CoroutineContext
- 15.3.3 在掛起點后切換線程
- 15.3.2 在自定義池中運行
- 15.3.1 顯式設置上下文
- 15.3 協程上下文和線程
- 15.2.4 與掛起點交錯調用
- 15.2.3 啟動一個任務
- 15.2.2 創建一個協程
- 15.2.1 從順序執行開始
- 15.2 使用協程并發運行
- 15.1.2 協程作為協作函數
- 15.1.1 并行與并發
- 15.1 協程和并發
- 第15章 探索協程
- 第五部分 編寫異步應用程序
- 14.5 本章小結
- 14.4 將記憶應用于動態規劃
- 14.3.3 記憶作為委托
- 14.3.2 記憶——Kotlin中的Groovy方法
- 14.3.1 重復計算
- 14.3 記憶
- 14.2 尾調用優化
- 14.1 遞歸的威力和危險
- 第14章 編寫遞歸和記憶
- 13.6 本章小結
- 13.5 使用作用域控制來縮小訪問范圍
- 13.4.2 XML構建器
- 13.4.1 HTML構建器
- 13.4 類型安全構建器
- 13.3.2 使用接收方和中綴
- 13.3.1 使用擴展函數
- 13.3 構建流暢性方面的挑戰
- 13.2.6 還有一些特性可以幫助DSL
- 13.2.5 隱式接收方影響DSL的創建
- 13.2.4 傳遞lambda不需要圓括號
- 13.2.3 使用擴展函數獲得特定的域
- 13.2.2 點和圓括號不與中綴在一起
- 13.2.1 分號可選
- 13.2 用于內部DSL的Kotlin
- 13.1.2 語境驅動和流暢
- 13.1.1 外部DSL與內部DSL
- 13.1 DSL的類型和特征
- 第13章 創建內部DSL
- 12.7 本章小結
- 12.6.2 帶接收方的多個作用域
- 12.6.1 傳遞一個接收方
- 12.6 隱式接收方
- 12.5.6 使用also將void函數鏈接起來
- 12.5.5 使用let將對象作為參數傳遞
- 12.5.4 使用run獲得結果
- 12.5.3 使用apply刪除重復的引用
- 12.5.2 來自冗長和混亂的代碼
- 12.5.1 四種方法的行為
- 12.5 帶Any對象的流暢性
- 12.4 帶中綴的函數流暢性
- 12.3 擴展函數
- 12.2.6 從類內注入
- 12.2.5 注入靜態方法
- 12.2.4 注入第三方類
- 12.2.3 使用擴展屬性注入屬性
- 12.2.2 使用擴展函數注入運算符
- 12.2.1 使用擴展函數注入方法
- 12.2 使用擴展函數和屬性進行注入
- 12.1 重載運算符
- 第12章 Kotlin的流暢性
- 第四部分 優雅且高效的Kotlin
- 11.4 本章小結
- 11.3.2 無限序列
- 11.3.1 使用序列提高性能
- 11.3 延遲計算序列
- 11.2.5 將對象進行分組
- 11.2.4 排序
- 11.2.3 flatten和flatMap
- 11.2.2 得到第一個和最后一個
- 11.2.1 filter﹑map和reduce
- 11.2 內部迭代器
- 11.1 外部迭代器與內部迭代器
- 第11章 內部迭代和延遲計算
- 10.7 本章小結
- 10.6.6 inline和return的良好實踐
- 10.6.5 crossinline參數
- 10.6.4 內聯lambda中允許非局部return
- 10.6.3 對參數精心選擇noinline
- 10.6.2 內聯優化
- 10.6.1 默認情況下沒有內聯優化
- 10.6 帶有lambda的內聯函數
- 10.5.3 非局部return
- 10.5.2 帶標簽的return
- 10.5.1 默認情況下不允許使用return
- 10.5 非局部和帶標簽的return
- 10.4 閉包和詞法作用域
- 10.3 lambda和匿名函數
- 10.2.7 函數返回函數
- 10.2.6 使用函數引用
- 10.2.5 用lambda作為最后一個參數
- 10.2.4 接收lambda
- 10.2.3 使用隱式參數
- 10.2.2 傳遞lambda
- 10.2.1 lambda的結構
- 10.2 lambda表達式
- 10.1.2 為什么以及何時使用函數式風格
- 10.1.1 什么是函數式風格
- 10.1 函數式風格
- 第10章 使用lambda進行函數式編程
- 第三部分 函數式Kotlin
- 9.8 本章小結
- 9.7.3 行使你的可否決權利
- 9.7.2 Observable委托
- 9.7.1 有點兒懶惰也沒關系
- 9.7 內置的標準委托
- 9.6.2 委托屬性
- 9.6.1 委托變量
- 9.6 委托變量和屬性
- 9.5 Kotlin委托的注意事項
- 9.4 處理方法沖突
- 9.3 委托給一個參數
- 9.2.4 使用Kotlin的by來進行委托
- 9.2.3 委托——艱難的方式
- 9.2.2 繼承的錯誤指向
- 9.2.1 一個設計問題
- 9.2 使用委托進行設計
- 9.1 何時選擇委托而不是繼承
- 第9章 通過委托進行擴展
- 8.6 本章小結
- 8.5 創建和使用枚舉
- 8.4 Sealed類
- 8.3 繼承
- 8.2 嵌套類和內部類
- 8.1.3 是接口還是抽象類
- 8.1.2 創建抽象類
- 8.1.1 創建接口
- 8.1 創建接口和抽象類
- 第8章 類層次結構和繼承
- 7.6 本章小結
- 7.5 數據類
- 7.4 創建泛型類
- 7.3.4 不是非常靜態的
- 7.3.3 Companion作為Factory
- 7.3.2 訪問同伴
- 7.3.1 類級別成員
- 7.3 伴生對象和類成員
- 7.2.5 底層探秘——字段和屬性
- 7.2.4 讀寫屬性
- 7.2.3 創建實例
- 7.2.2 只讀屬性
- 7.2.1 最小的類
- 7.2 創建類
- 7.1.3 頂級函數與單例
- 7.1.2 帶有對象聲明的單例
- 7.1.1 帶有對象表達式的匿名對象
- 7.1 對象和單例
- 第7章 對象和類
- 第二部分 面向對象的Kotlin
- 6.7 本章小結
- 6.6 具體化的類型參數
- 6.5.5 星投影
- 6.5.4 使用where的參數類型約束
- 6.5.3 使用逆變
- 6.5.2 使用協變
- 6.5.1 類型不變性
- 6.5 泛型:參數類型的變化和約束
- 6.4 顯式類型轉換
- 6.3.4 使用帶有when的類型檢查和智能轉換
- 6.3.3 智能轉換
- 6.3.2 使用is
- 6.3.1 類型檢查
- 6.3 類型檢查和轉換
- 6.2.6 使用when
- 6.2.5 不要使用不安全的斷言運算符
- 6.2.4 Elvis運算符
- 6.2.3 安全調用運算符
- 6.2.2 使用可空類型
- 6.2.1 null是件不好的事
- 6.2 可空的引用
- 6.1.2 Nothing比void更深入
- 6.1.1 Any是基類
- 6.1 Any和Nothing類
- 第6章 使用類型安全性解決問題
- 5.7 本章小結
- 5.6 使用映射
- 5.5 使用集合
- 5.4 使用列表
- 5.3 對象和基元數組
- 5.2 使用Pair和Triple
- 5.1.2 視圖
- 5.1.1 Kotlin所添加的便利方法
- 5.1 集合的類型
- 第5章 使用集合
- 4.4 本章小結
- 4.3.3 when和變量的作用域
- 4.3.2 when用作語句
- 4.3.1 when用作表達式
- 4.3 何時應該使用when
- 4.2 遍歷數組和列表
- 4.1.4 跳過范圍內的值
- 4.1.3 反向迭代
- 4.1.2 正向迭代
- 4.1.1 范圍類
- 4.1 范圍與迭代
- 第4章 外部迭代和參數匹配
- 3.5 本章小結
- 3.4 解構
- 3.3.2 spread運算符
- 3.3.1 可變數量的實參
- 3.3 vararg和spread
- 3.2.2 使用命名參數提高可讀性
- 3.2.1 演化帶有默認參數的函數
- 3.2 默認參數和命名參數
- 3.1.5 帶有塊體的函數
- 3.1.4 定義參數
- 3.1.3 所有的函數都是表達式
- 3.1.2 返回類型和類型推斷
- 3.1.1 KISS函數
- 3.1 創建函數
- 第3章 使用函數
- 2.8 本章小結
- 2.7 更多的表達式,更少的語句
- 2.6.2 多行字符串
- 2.6.1 沒有轉義
- 2.6 原始字符串
- 2.5 字符串模板
- 2.4 改進的相等性檢查
- 2.3 選擇val而不是var
- 2.2 合理的警告
- 2.1.4 try-catch是可選的
- 2.1.3 類和函數是可選的
- 2.1.2 變量類型規范是可選的
- 2.1.1 分號是可選的
- 2.1 減少輸入
- 第2章 從Java角度了解Kotlin的基本知識
- 第一部分 使用Kotlin編寫腳本
- 1.7 本章小結
- 1.6 選擇哪個選項
- 1.5 編譯成其他目標
- 1.4.4 作為腳本運行
- 1.4.3 使用REPL進行實驗
- 1.4.2 在IDE中運行
- 1.4.1 在命令行上運行
- 1.4 編譯成字節碼并運行
- 1.3.2 驗證安裝
- 1.3.1 安裝Kotlin SDK
- 1.3 帶Kotlin去兜兜風
- 1.2 為什么選擇Kotlin
- 1.1.2 具有類型推斷的靜態類型
- 1.1.1 多范式編程
- 1.1 愛上Kotlin的理由
- 第1章 你好Kotlin
- 致謝
- 前言
- 序
- 本書贊譽
- 版權頁
- 封面
- 封面
- 版權頁
- 本書贊譽
- 序
- 前言
- 致謝
- 第1章 你好Kotlin
- 1.1 愛上Kotlin的理由
- 1.1.1 多范式編程
- 1.1.2 具有類型推斷的靜態類型
- 1.2 為什么選擇Kotlin
- 1.3 帶Kotlin去兜兜風
- 1.3.1 安裝Kotlin SDK
- 1.3.2 驗證安裝
- 1.4 編譯成字節碼并運行
- 1.4.1 在命令行上運行
- 1.4.2 在IDE中運行
- 1.4.3 使用REPL進行實驗
- 1.4.4 作為腳本運行
- 1.5 編譯成其他目標
- 1.6 選擇哪個選項
- 1.7 本章小結
- 第一部分 使用Kotlin編寫腳本
- 第2章 從Java角度了解Kotlin的基本知識
- 2.1 減少輸入
- 2.1.1 分號是可選的
- 2.1.2 變量類型規范是可選的
- 2.1.3 類和函數是可選的
- 2.1.4 try-catch是可選的
- 2.2 合理的警告
- 2.3 選擇val而不是var
- 2.4 改進的相等性檢查
- 2.5 字符串模板
- 2.6 原始字符串
- 2.6.1 沒有轉義
- 2.6.2 多行字符串
- 2.7 更多的表達式,更少的語句
- 2.8 本章小結
- 第3章 使用函數
- 3.1 創建函數
- 3.1.1 KISS函數
- 3.1.2 返回類型和類型推斷
- 3.1.3 所有的函數都是表達式
- 3.1.4 定義參數
- 3.1.5 帶有塊體的函數
- 3.2 默認參數和命名參數
- 3.2.1 演化帶有默認參數的函數
- 3.2.2 使用命名參數提高可讀性
- 3.3 vararg和spread
- 3.3.1 可變數量的實參
- 3.3.2 spread運算符
- 3.4 解構
- 3.5 本章小結
- 第4章 外部迭代和參數匹配
- 4.1 范圍與迭代
- 4.1.1 范圍類
- 4.1.2 正向迭代
- 4.1.3 反向迭代
- 4.1.4 跳過范圍內的值
- 4.2 遍歷數組和列表
- 4.3 何時應該使用when
- 4.3.1 when用作表達式
- 4.3.2 when用作語句
- 4.3.3 when和變量的作用域
- 4.4 本章小結
- 第5章 使用集合
- 5.1 集合的類型
- 5.1.1 Kotlin所添加的便利方法
- 5.1.2 視圖
- 5.2 使用Pair和Triple
- 5.3 對象和基元數組
- 5.4 使用列表
- 5.5 使用集合
- 5.6 使用映射
- 5.7 本章小結
- 第6章 使用類型安全性解決問題
- 6.1 Any和Nothing類
- 6.1.1 Any是基類
- 6.1.2 Nothing比void更深入
- 6.2 可空的引用
- 6.2.1 null是件不好的事
- 6.2.2 使用可空類型
- 6.2.3 安全調用運算符
- 6.2.4 Elvis運算符
- 6.2.5 不要使用不安全的斷言運算符
- 6.2.6 使用when
- 6.3 類型檢查和轉換
- 6.3.1 類型檢查
- 6.3.2 使用is
- 6.3.3 智能轉換
- 6.3.4 使用帶有when的類型檢查和智能轉換
- 6.4 顯式類型轉換
- 6.5 泛型:參數類型的變化和約束
- 6.5.1 類型不變性
- 6.5.2 使用協變
- 6.5.3 使用逆變
- 6.5.4 使用where的參數類型約束
- 6.5.5 星投影
- 6.6 具體化的類型參數
- 6.7 本章小結
- 第二部分 面向對象的Kotlin
- 第7章 對象和類
- 7.1 對象和單例
- 7.1.1 帶有對象表達式的匿名對象
- 7.1.2 帶有對象聲明的單例
- 7.1.3 頂級函數與單例
- 7.2 創建類
- 7.2.1 最小的類
- 7.2.2 只讀屬性
- 7.2.3 創建實例
- 7.2.4 讀寫屬性
- 7.2.5 底層探秘——字段和屬性
- 7.3 伴生對象和類成員
- 7.3.1 類級別成員
- 7.3.2 訪問同伴
- 7.3.3 Companion作為Factory
- 7.3.4 不是非常靜態的
- 7.4 創建泛型類
- 7.5 數據類
- 7.6 本章小結
- 第8章 類層次結構和繼承
- 8.1 創建接口和抽象類
- 8.1.1 創建接口
- 8.1.2 創建抽象類
- 8.1.3 是接口還是抽象類
- 8.2 嵌套類和內部類
- 8.3 繼承
- 8.4 Sealed類
- 8.5 創建和使用枚舉
- 8.6 本章小結
- 第9章 通過委托進行擴展
- 9.1 何時選擇委托而不是繼承
- 9.2 使用委托進行設計
- 9.2.1 一個設計問題
- 9.2.2 繼承的錯誤指向
- 9.2.3 委托——艱難的方式
- 9.2.4 使用Kotlin的by來進行委托
- 9.3 委托給一個參數
- 9.4 處理方法沖突
- 9.5 Kotlin委托的注意事項
- 9.6 委托變量和屬性
- 9.6.1 委托變量
- 9.6.2 委托屬性
- 9.7 內置的標準委托
- 9.7.1 有點兒懶惰也沒關系
- 9.7.2 Observable委托
- 9.7.3 行使你的可否決權利
- 9.8 本章小結
- 第三部分 函數式Kotlin
- 第10章 使用lambda進行函數式編程
- 10.1 函數式風格
- 10.1.1 什么是函數式風格
- 10.1.2 為什么以及何時使用函數式風格
- 10.2 lambda表達式
- 10.2.1 lambda的結構
- 10.2.2 傳遞lambda
- 10.2.3 使用隱式參數
- 10.2.4 接收lambda
- 10.2.5 用lambda作為最后一個參數
- 10.2.6 使用函數引用
- 10.2.7 函數返回函數
- 10.3 lambda和匿名函數
- 10.4 閉包和詞法作用域
- 10.5 非局部和帶標簽的return
- 10.5.1 默認情況下不允許使用return
- 10.5.2 帶標簽的return
- 10.5.3 非局部return
- 10.6 帶有lambda的內聯函數
- 10.6.1 默認情況下沒有內聯優化
- 10.6.2 內聯優化
- 10.6.3 對參數精心選擇noinline
- 10.6.4 內聯lambda中允許非局部return
- 10.6.5 crossinline參數
- 10.6.6 inline和return的良好實踐
- 10.7 本章小結
- 第11章 內部迭代和延遲計算
- 11.1 外部迭代器與內部迭代器
- 11.2 內部迭代器
- 11.2.1 filter﹑map和reduce
- 11.2.2 得到第一個和最后一個
- 11.2.3 flatten和flatMap
- 11.2.4 排序
- 11.2.5 將對象進行分組
- 11.3 延遲計算序列
- 11.3.1 使用序列提高性能
- 11.3.2 無限序列
- 11.4 本章小結
- 第四部分 優雅且高效的Kotlin
- 第12章 Kotlin的流暢性
- 12.1 重載運算符
- 12.2 使用擴展函數和屬性進行注入
- 12.2.1 使用擴展函數注入方法
- 12.2.2 使用擴展函數注入運算符
- 12.2.3 使用擴展屬性注入屬性
- 12.2.4 注入第三方類
- 12.2.5 注入靜態方法
- 12.2.6 從類內注入
- 12.3 擴展函數
- 12.4 帶中綴的函數流暢性
- 12.5 帶Any對象的流暢性
- 12.5.1 四種方法的行為
- 12.5.2 來自冗長和混亂的代碼
- 12.5.3 使用apply刪除重復的引用
- 12.5.4 使用run獲得結果
- 12.5.5 使用let將對象作為參數傳遞
- 12.5.6 使用also將void函數鏈接起來
- 12.6 隱式接收方
- 12.6.1 傳遞一個接收方
- 12.6.2 帶接收方的多個作用域
- 12.7 本章小結
- 第13章 創建內部DSL
- 13.1 DSL的類型和特征
- 13.1.1 外部DSL與內部DSL
- 13.1.2 語境驅動和流暢
- 13.2 用于內部DSL的Kotlin
- 13.2.1 分號可選
- 13.2.2 點和圓括號不與中綴在一起
- 13.2.3 使用擴展函數獲得特定的域
- 13.2.4 傳遞lambda不需要圓括號
- 13.2.5 隱式接收方影響DSL的創建
- 13.2.6 還有一些特性可以幫助DSL
- 13.3 構建流暢性方面的挑戰
- 13.3.1 使用擴展函數
- 13.3.2 使用接收方和中綴
- 13.4 類型安全構建器
- 13.4.1 HTML構建器
- 13.4.2 XML構建器
- 13.5 使用作用域控制來縮小訪問范圍
- 13.6 本章小結
- 第14章 編寫遞歸和記憶
- 14.1 遞歸的威力和危險
- 14.2 尾調用優化
- 14.3 記憶
- 14.3.1 重復計算
- 14.3.2 記憶——Kotlin中的Groovy方法
- 14.3.3 記憶作為委托
- 14.4 將記憶應用于動態規劃
- 14.5 本章小結
- 第五部分 編寫異步應用程序
- 第15章 探索協程
- 15.1 協程和并發
- 15.1.1 并行與并發
- 15.1.2 協程作為協作函數
- 15.2 使用協程并發運行
- 15.2.1 從順序執行開始
- 15.2.2 創建一個協程
- 15.2.3 啟動一個任務
- 15.2.4 與掛起點交錯調用
- 15.3 協程上下文和線程
- 15.3.1 顯式設置上下文
- 15.3.2 在自定義池中運行
- 15.3.3 在掛起點后切換線程
- 15.3.4 修改CoroutineContext
- 15.4 調試協程
- 15.4.1 async和await
- 15.4.2 看一眼延續
- 15.5 創建無限序列
- 15.5.1 使用序列
- 15.5.2 使用iterator函數
- 15.6 本章小結
- 第16章 異步編程
- 16.1 非阻塞異步編程
- 16.1.1 按順序開始
- 16.1.2 進行異步
- 16.2 異常處理
- 16.2.1 啟動和異常
- 16.2.2 異步和異常
- 16.3 取消和超時
- 16.3.1 取消協程
- 16.3.2 請勿打擾
- 16.3.3 雙向取消
- 16.3.4 監督作業
- 16.3.5 編程時使用超時
- 16.4 本章小結
- 第六部分 互操作和測試
- 第17章 將Java與Kotlin混合使用
- 17.1 聯合編譯
- 17.2 從Kotlin調用Java
- 17.3 從Java調用Kotlin
- 17.3.1 使用Java中的重載運算符
- 17.3.2 創建靜態方法
- 17.3.3 傳遞lambda
- 17.3.4 添加throws子句
- 17.3.5 使用帶默認參數的函數
- 17.3.6 訪問頂級函數
- 17.3.7 更多注釋
- 17.4 本章小結
- 第18章 使用Kotlin進行單元測試
- 18.1 被測試的代碼
- 18.2 獲取項目文件
- 18.2.1 設置Gradle
- 18.2.2 設置Maven
- 18.3 從Canary測試開始
- 18.4 編寫經驗測試
- 18.5 編寫數據驅動的測試
- 18.6 模擬依賴項
- 18.6.1 創建交互測試
- 18.6.2 測試解析數據
- 18.7 測試頂級函數
- 18.8 測試協程和異步調用
- 18.9 與服務集成
- 18.10 查看代碼覆蓋率
- 18.11 將應用程序用于驅動
- 18.12 本章小結
- 第19章 使用Kotlin編寫Spring應用程序
- 19.1 創建一個Starter項目
- 19.2 創建一個控制器
- 19.3 創建一個實體類
- 19.4 創建一個存儲庫接口
- 19.5 創建一個服務
- 19.6 將服務與控制器集成
- 19.7 繼續實踐
- 19.8 本章小結
- 第20章 使用Kotlin編寫Android應用程序
- 20.1 創建一個項目
- 20.2 定義域對象
- 20.3 創建布局
- 20.4 實施活動
- 20.5 更新RecyclerView
- 20.6 查看應用程序的運行情況
- 20.7 本章小結
- 附錄1 轉換為JavaScript
- 附錄2 Kotlin/Native
- 附錄3 Kotlin到WebAssembly
- 參考文獻 更新時間:2021-06-09 14:59:39