第103篇 DSL 构建原理:type-safe builder 如何工作
Kotlin DSL 并非魔法,本质是三大特性协同:带接收者 Lambda(`T.() -> Unit`)提供隐式 `this`、扩展函数封装配置逻辑、尾随语法提升可读性。编译后即普通方法调用,零运行时开销;配合 `@DslMarker` 可实现严格作用域隔离,保障类型安全与工程健壮性。
第100篇 密封类加 when 的状态机:ViewModel 状态范式
本节聚焦“状态组织”,详解 Kotlin `sealed` 类建模状态机的三大原则:①状态完备(编译期穷举检查);②状态互斥(杜绝矛盾态);③迁移可追踪(单入口变更)。对比枚举与多布尔字段,结合登录、表单、列表等真实场景,阐明如何用 `sealed interface/class` + `when` 穷举 + 分离 StateFlow/SharedFlow,构建健壮、可维护的 UI 状态流。
第098篇 空安全与 Java 混编:平台类型的风险控制
本文深度剖析Kotlin与Java混编中空安全的“信任边界”:指出平台类型、注解失效与反射泛型三大漏洞,提出“类型收口+运行时断言+架构约定”三层防线,强调用`requireNotNull`替代`!!`、用`sealed`封装多态结果,真正实现NPE可控可追溯。
第093篇 Flow 入门:冷流、热流与背压
本文深入解析 Kotlin Flow 的核心机制:它本质是**冷流 + 一对一发射 + 结构化协作**的组合。厘清 Flow 与 RxJava Flowable 的差异、冷流“按需生产”特性、`collect` 的挂起本质及天然背压原理(依托 `emit` 挂起),并结合 Android 工程实践(`repeatOnLifecycle`、`flowOn` 误区、异常转数据流)与高频面试题,助你真正掌握 Flow 设计哲学与避坑要点。
第087篇 函数类型与 typealias:回调接口的新写法
Kotlin中,函数类型(如`(Int) -> String`)本质是编译为`FunctionN`接口的语法糖,支持型变、空安全与默认值;`typealias`仅为编译期别名,提升可读性但无类型隔离。二者协同,体现“用语言特性而非绕行”的设计哲学。
第086篇 泛型型变 in 与 out:声明处型变
Kotlin型变核心是“位置约束”:`out T`仅用于返回位(协变,只读),`in T`仅用于参数位(逆变,只写);越界即编译报错。`in out T`等价于不变。声明处型变比Java使用处更安全——直接禁用非法操作(如`List<out T>`无`add`)。协程/Flow等API依赖此机制实现类型安全组合。
第085篇 类委托 by:装饰器模式的一行实现
Kotlin类委托`by`是编译期语法糖,自动生成接口抽象方法的转发实现(如`delegate.foo()`),零反射、零运行时开销。但仅支持接口/抽象方法,不委托`Any`三方法、具体类方法及Java默认方法;委托对象天然共享状态,需注意隔离与可变性边界。
第084篇 委托属性与 Delegates:属性系统的深水区
Kotlin委托属性是优雅却常被忽视的特性:编译器将属性读写自动转发至`getValue`/`setValue`方法。本文深入剖析其核心机制,详解`by lazy`、`notNull`、`observable`三大标准委托,并直击Android开发中委托导致内存泄漏、线程不安全等典型坑点与解法。