第106篇 data class 的 equals 与 copy:深浅拷贝的坑
Kotlin `data class` 自动生成 `equals`/`hashCode`/`toString`/`copy`/`componentN`,但**非深拷贝、数组引用比较、可变集合共享引用**——易致UI状态错乱、Diff失效、哈希查找丢失。核心原则:状态类只用不可变类型(`List`/`Set`),数组需覆写 `equals`,`copy` 后禁用就地修改。
第094篇 StateFlow 与 SharedFlow:UI 状态分发的标配
本文深入解析 `StateFlow` 与 `SharedFlow` 的本质区别:前者是有状态的“当前值”容器(replay=1、自动去重),专用于UI状态;后者是无状态的“事件广播”通道(replay可配、支持缓冲与背压策略),适用于一次性事件或多方通知。结合机制、坑点、工程实践与面试高频题,助你彻底避开重复弹窗、数据丢失等典型陷阱。
第086篇 泛型型变 in 与 out:声明处型变
Kotlin型变核心是“位置约束”:`out T`仅用于返回位(协变,只读),`in T`仅用于参数位(逆变,只写);越界即编译报错。`in out T`等价于不变。声明处型变比Java使用处更安全——直接禁用非法操作(如`List<out T>`无`add`)。协程/Flow等API依赖此机制实现类型安全组合。
第079篇 高阶函数:函数作为参数与返回值
本文深入解析Android开发中的高阶函数,直击面试痛点:从概念(函数作参数/返回值)到本质(控制反转与流程复用),再到工程落地(生命周期回调、异步回调、DSL作用域函数)。详解性能坑(非inline导致对象分配)、设计误(过度抽象)、内存漏(Lambda捕获this),并给出可落地的修复方案与选型判据。
第055篇 Optional 与空值处理:比判空更优雅的表达
`Optional<T>` 是 Java 8 引入的容器类,核心价值是**将“可能为空”显式表达在类型中**,提升空安全与可读性。仅限用作**方法返回值**,禁用于字段、参数及高频路径;需搭配 `ofNullable`、`map`/`flatMap`、`orElseGet` 等规范使用,避免序列化、性能与语义陷阱。