目 录
第1章 开启Kotlin编程之旅 1
1.1
Kotlin语言简介 1
1.2 示例 3
1.3 处理Kotlin代码 8
1.3.1
Kotlin Playground 8
1.3.2
Android Studio 10
1.4
Kotlin底层机制 16
1.5
Kotlin的其他优势 17
1.6 本章小结 18
第2章 Kotlin语言基础知识 19
2.1 变量 19
2.2 类型推断 21
2.3 严格的空保护机制 24
2.3.1
安全调用 27
2.3.2
elvis操作符 28
2.3.3
非空断言 29
2.3.4
let 30
2.4 可空性和Java 30
2.5 转换 32
2.5.1
安全/不安全转换操作符 32
2.5.2
智能转换 34
2.6 基本数据类型 37
2.6.1
数字 38
2.6.2
字符 40
2.6.3
数组 40
2.6.4
布尔类型 42
2.7 复合数据类型 42
2.7.1
字符串 42
2.7.2
范围 43
2.7.3
集合 45
2.8 语句和表达式 45
2.9 控制流 46
2.9.1
if语句 46
2.9.2
when表达式 47
2.9.3
循环 50
2.9.4
break和continue 52
2.10
异常 56
2.11
编译期常量 59
2.12
委托机制 59
2.13
本章小结 60
第3章 函数 61
3.1 基本的函数声明和应用 61
3.1.1
参数 62
3.1.2
返回函数 64
3.2
vararg参数 65
3.3 单表达式函数 67
3.4 尾递归函数 69
3.5 调用函数的不同方式 70
3.5.1
默认参数值 71
3.5.2
命名参数语法 71
3.6 顶级函数 72
3.7 顶级函数的底层机制 74
3.8 局部函数 76
3.9 无返回类型 77
3.10
本章小结 79
第4章 类和对象 80
4.1 类 80
4.2 属性 81
4.2.1
读-写属性和只读属性 84
4.2.2
属性访问语法 85
4.2.3
自定义getter/setter 88
4.2.4
延迟初始化属性 91
4.2.5
注解属性 92
4.2.6
内联属性 93
4.3 构造函数 93
4.3.1
属性和构造函数参数 95
4.3.2
包含默认参数的构造函数 96
4.4 继承 97
4.5 接口 101
4.6 数据类 105
4.6.1
equals和hashCode方法 106
4.6.2
toString方法 108
4.6.3
copy方法 109
4.6.4
解构声明 110
4.7 操作符重载 111
4.8 对象声明 115
4.9 对象表达式 117
4.10
伴生对象 119
4.11
枚举类 124
4.12
命名方法的中缀调用 127
4.13
可见性修饰符 130
4.14
密封类 134
4.15
嵌套类 136
4.16
导入别名 137
4.17
本章小结 138
第5章 函数—一等公民 140
5.1 函数类型 140
5.2 匿名函数 142
5.3
Lambda表达式 144
5.4 高阶函数 147
5.4.1
向函数提供操作 149
5.4.2
观察者(监听器)模式 150
5.4.3
线程操作后的回调 151
5.5 命名参数和Lambda表达式的组合 152
5.6 参数规则中*后一个Lambda
152
5.6.1
命名代码的包围机制 154
5.6.2
利用LINQ风格处理数据结构 155
5.7
Kotlin中的Java SAM支持 156
5.8 命名Kotlin函数类型 158
5.8.1
函数类型中的命名参数 158
5.8.2
类型别名 160
5.9 针对未使用变量的下划线
162
5.10
Lambda表达式中的解构机制 162
5.11
内联函数 164
5.11.1
noinline修饰符 167
5.11.2
非本地返回 167
5.11.3
Lambda表达式中的标记返回 170
5.11.4
crossinline修饰符 173
5.11.5
inline属性 174
5.12
函数引用 175
5.13
本章小结 178
第6章 泛型 179
6.1 泛型概述 179
6.2 泛型约束条件 181
6.3 变型 184
6.3.1
变型修饰符 186
6.3.2
使用位置变型和声明位置变型 187
6.3.3
集合变型 189
6.3.4
变型的生产者/消费者限制条件 191
6.3.5
不可变构造函数 193
6.4 类型擦除 193
6.4.1
reified类型参数 195
6.4.2
startActivity方法 196
6.5 星号投射 197
6.6 类型参数命名规则 199
6.7 本章小结 200
第7章 扩展函数和属性 201
7.1 扩展函数 201
7.1.1
扩展函数底层机制 203
7.1.2
伴生对象扩展 206
7.1.3
通过扩展函数重载操作符 207
7.1.4
顶级函数的应用位置 207
7.2 扩展属性 208
7.3 成员扩展函数和属性 211
7.3.1
接收者类型 214
7.3.2
成员扩展函数和属性的底层机制 216
7.4 泛型扩展函数 217
7.4.1
Kotlin集合类型层次结构 220
7.4.2
map、filter和flatMap函数 223
7.4.3
forEach和onEach函数 225
7.4.4
withIndex以及索引变化版本 225
7.4.5
sum、count、min、max和排序函数 226
7.4.6
其他流处理函数 229
7.4.7
集合流处理示例 230
7.4.8
序列 231
7.5 包含接收者的函数字面值
233
7.5.1
Kotlin标准库函数 234
7.5.2
特定领域内的语言 241
7.6 本章小结 248
第8章 委托机制 249
8.1 类委托 249
8.1.1
委托模式 249
8.1.2
装饰器模式 254
8.2 属性委托 256
8.2.1
属性委托的含义 256
8.2.2
预定义委托 259
8.2.3
自定义委托 272
8.3 本章小结 282
第9章 Marvel Gallery项目实战 283
9.1
Marvel Gallery应用程序 283
9.1.1
如何阅读本章内容 283
9.1.2
创建空项目 286
9.1.3 任务图片库 288
9.1.4
人物角色搜索 328
9.1.5
人物角色的资料显示 338
9.2 本章小结 353