- 文集信息
- 目录大纲
- 最新文档
- 知识宇宙
文集详情
文集导读
Kotlin 安卓开发实战指南:安全消除术
导读:这不是一本按语法点罗列的 Kotlin 手册,而是一本"事故消灭清单"。Java 与安卓开发中反复出现的五类事故——空指针崩溃、并发竞态、分支遗漏、回调地狱、工具类泛滥——Kotlin 各给了一个语言级机制来对付。本册逐个拆解:事故怎么发生、机制如何在编译期拦截它、以及机制的边界在哪。
这本教程讲什么
先看一组老安卓工程师都眼熟的场面:
- 线上崩溃榜第一名永远是
NullPointerException,堆栈指向一行看似无害的user.getAddress().getCity(); - 一个
ArrayList被后台线程遍历、主线程 simultaneously 清空,偶现ConcurrentModificationException,且只在低端机上复现; - 产品加了新支付状态,
switch里忘了对应分支,用户停在空白页,日志一条没有; - 五层嵌套的回调里夹着两处
Handler.post,没人敢动这段代码,因为没人说得清执行顺序; - 项目里躺着
StringUtils、DateUtils、KeyboardUtils、SpUtils十几个工具类,同一个"手机号脱敏"逻辑存在三份。
这五类事故没有一个是"程序员不够聪明"造成的,它们是 Java 语言设计留给安卓开发的结构性陷阱。Kotlin 的价值主张恰好卡在这里:与其靠 code review 和自觉,不如让编译器出面,把整类事故从运行时挪到编译期消灭。本册把这套思路称为"安全消除术"——每一节都回答同一个问题:Kotlin 用什么机制,消灭了哪类事故。
五根支柱对应五章主体内容:
- 空安全对 NPE:类型系统把"可能为 null"变成类型的一部分,
String与String?是两个类型,不处理就编译不过; - val 与不可变对竞态:默认不可变引用、只读集合接口,让"数据被谁改过"的搜索范围从全工程缩到一个
mutableListOf调用点; - 密封类对穷举遗漏:受限类层次加 when 穷举检查,新增分支时编译器直接标红所有需要补处理的调用点;
- 协程对回调地狱:挂起函数把异步写成顺序代码,结构化并发让"忘了取消"这件事在语法上不可能发生;
- 扩展函数对工具类泛滥:把
Utils.method(obj)翻转成obj.method(),逻辑挂回数据类型身边,IDE 补全可见。
全书机制与事故对照总览
上图把五根支柱与它们各自瞄准的事故放在一张图里:左列是 Java 时代的运行时事故,中间是 Kotlin 的对应机制,右列是机制生效的时机(编译期拦截还是运行时兜底)。

章节安排
全册共八章,前两章打地基,中间五章对应五根支柱,最后一章把所有防线接进真实的安卓工程:
- 第 1 章 入场:事故驱动的迁徙。从"十亿美元错误"的历史讲起,看 Kotlin 如何拿下安卓官方语言的位置;然后搭一个把防御设为默认值的工程骨架;最后过一遍 val、函数与表达式化语法——这些是全书代码的书写底座。
- 第 2 章 空安全:把 NPE 拦在编译期。可空类型的完整兵器谱、初始化时机的两种延迟方案、异常收容与 Result 风格错误处理。
- 第 3 章 穷举无漏:密封类与数据建模。数据类如何替代手写 JavaBean,密封类如何给 UI 状态建模并让 when 穷举检查生效。
- 第 4 章 不可变与集合:竞态第一道墙。只读集合接口的分界线,val 引用与对象可变性的区别,以及它们如何缩小竞态排查范围。
- 第 5 章 协程:终结回调地狱。全册篇幅最大的一章——挂起函数原理、结构化并发、调度器、取消与异常传播、Flow 冷热流。
- 第 6 章 扩展与 DSL:工具类退场。扩展函数的静态解析本质、六个作用域函数的选型、用 DSL 收敛配置代码。
- 第 7 章 互操作:Java 边界的防御工事。平台类型为什么是空安全的"法外之地",以及混合项目的渐进迁移路线。
- 第 8 章 安卓实战:把防线连成系统。现代 UI 层写法、ViewModel 与 StateFlow 的单向数据流、性能防线与 Detekt 静态检查。
适合谁读
- 有 Java 基础、正在或准备写安卓的工程师:每一节都有 Java 对照代码,迁移成本最低;
- 已经在写 Kotlin、但停留在"把 Java 翻译成 Kotlin"阶段的工程师:本册重点讲机制的设计动机和边界,帮你从翻译走向利用;
- 维护 Java 与 Kotlin 混合老项目、计划渐进迁移的团队负责人:第 7 章给出可落地的迁移顺序与风险评估。
阅读不需要任何 Kotlin 经验,但需要基本的面向对象概念(类、接口、继承)与安卓四大组件的模糊印象。全书代码基于 Kotlin 1.9 与协程 1.7 之后的稳定 API,Jetpack 写法以 viewBinding 与 lifecycle-aware coroutine scope 为准,涉及版本差异处会显式标注。
一个约定
本册所有示例遵循同一叙事格式:先给会出事的 Java 代码,再给消灭事故的 Kotlin 代码,最后讨论机制管不了什么。之所以坚持这个格式,是因为语言特性只有放进"它防住了什么"的语境里才记得住。当你读完能在 code review 里说出"这里用密封类而不是枚举,是因为分支要携带数据"这样的话,本册的目标就达成了。
各章开头的章支柱页给出全景图与学习目标,赶时间的话可以先读八张章图再回头补细节。现在,从第 1 章的那场"十亿美元错误"开始。
目录大纲
最新文档
知识宇宙
正在加载知识图谱...