Kotlin 协程里 SupervisorJob 为什么不会把子协程异常通过 join() 抛出来?
本文围绕 Kotlin 协程里最容易误判的一点展开:为什么同样是子协程失败,`Job` 与 `SupervisorJob` 在 `join()` 上的表现完全不同。文章用对比示例、处理方式和适用场景,把异常传播、失败隔离和实际写法一次讲清。
本文围绕 Kotlin 协程里最容易误判的一点展开:为什么同样是子协程失败,`Job` 与 `SupervisorJob` 在 `join()` 上的表现完全不同。文章用对比示例、处理方式和适用场景,把异常传播、失败隔离和实际写法一次讲清。

`return@find` 是 Kotlin 里常见的标签返回写法,核心作用不是“结束整个函数”,而是只从 `find {}` 这段 lambda 中返回结果。本文结合示例拆清它与普通 `return` 的区别,并说明为什么在 `find`、`forEach`、`map` 等高阶函数里需要这种显式写法。

Kotlin 把空安全做进了类型系统:类型默认非空,只有显式加上 `?` 才表示可能为 `null`。理解可空类型、编译期检查、平台类型和常见操作符后,能明显减少 `NullPointerException`,也更容易写出边界清晰的 Kotlin 代码。 Kotlin 的空安全经常被概括成“类型后面加个 `?`”,但真正难点不在语法,而在如何用类型表达业务语义、把空值处理留在合适的位置。

Kotlin Multiplatform 正在成为跨平台开发中的一条中间路线:既不强制放弃原生能力,也能把业务逻辑甚至部分 UI 共享起来。本文围绕项目结构、与 Flutter 和 React Native 的差异、iOS 侧最新进展以及真实企业案例,梳理它适合解决什么问题,又在哪些环节仍需保留平台实现。

Kotlin 的扩展机制允许开发者在不修改原类、也不继承的前提下,为现有类型补充函数和属性。本文从扩展函数的基本写法讲起,再到泛型扩展、伴生对象扩展,以及 let、run、apply 等常用作用域扩展的使用差异。

这篇文章按 Kotlin 官方语义把 77 个关键字重新梳理成三组:硬关键字、软关键字和修饰符关键字。重点不在机械背表,而是帮你判断它们分别会在什么场景触发语法规则、哪些绝不能当标识符、哪些只在上下文中生效。

这篇文章围绕 Jetpack Compose 中 Flow 的几种常见收集方式展开,重点解释 `collectAsStateWithLifecycle`、`collectAsState`、`LaunchedEffect` 与 `produceState` 的差异,并补充多 Flow 组合、背压处理、测试与性能建议,帮助你按场景选对方案。 在 Jetpack Compose 里接入 Kotlin Flow,难点从来不只是“怎么收集”,而是收集之后是否符合生命周期、会不会引发多余重组,以及状态和事件有没有被放到正确的位置。

本文深入对比Java与Kotlin在Android开发中的差异。Kotlin凭借更简洁的语法减少样板代码,通过严格的空类型系统避免空指针异常,并具备优异的跨平台能力(编译为JS)。尽管全量编译稍慢,但其增量编译性能与Java相当。对于追求高安全性和高效率的现代Android项目,Kotlin是极具优势的替代或互补方案。