Kotlin 语言要点
版本unknown 更新日志2025-11-18 GitHubJetBrains/kotlin
340px

基础语法 >>>

  • 变量与类型后置:val a: Int = 1;类型推断
  • 函数:fun f(x: Int): Int = x + 1;默认/命名参数
  • 字符串模板:"Hello $name""${expr}"
  • 空安全:String??.?:!!
  • 原始字符串:""" ... """ 多行 + trimIndent/trimMargin
  • 比较:== 结构相等,=== 引用相等
  • 顶层声明:文件顶层函数/属性;const val 仅顶层或 object/伴生
  • 类型别名:typealias UserId = String
  • 包与导入:import 支持 as 重命名
  • 约定:编码规范

控制流与集合 >>>

  • when 表达式支持类型/范围/条件分支,返回值友好
  • 区间:1..10downTostepuntil
  • 集合:listOf/mutableListOfmap/filter/flatMap/groupBy
  • 解构:val (a,b) = pair;数据类提供 componentN
  • if/when/try 都是表达式,可直接赋值
  • 循环:for ((i,v) in list.withIndex())repeat(n)
  • 标签:return@label/break@label/continue@label
  • try 表达式:val v = try { parse() } catch(e:Exception){ -1 }

类与对象 >>>

  • 数据类:data class User(val id:Int, val name:String)
  • 密封类型:sealed class / sealed interface 表达 ADT
  • 对象:object 单例;companion object 伴生对象
  • 扩展:fun String.title(): String = ...;属性与运算符重载
  • 构造器:主构造 + init;次构造需 this(...) 链接
  • 访问器:get()/set() 自定义;field 引用后备字段
  • 可见性:public/internal/protected/private
  • 继承:open/final/abstract;接口可含默认实现
  • 嵌套与内部:nested(静态) vs inner(持外部引用)
  • 延迟:lateinit varby lazy { }

泛型与内联 >>>

  • 型变:out 协变、in 逆变;边界 <T: Number>
  • 实化:inline fun <reified T> parse(..) 直接使用 T::class
  • 内联:inlinenoinlinecrossinline
  • 作用域函数:let/apply/also/run/with 选型与返回值对比
  • use-site 型变:MutableList<out T>/in T 限制读写
  • 星投影:List<*>;多重约束:where T: A, T: B
  • 内联返回:非局部返回仅在 inline 可用;crossinline 禁止
  • 实化用法:is T 检查、Json.decodeFromString<T>(s)

协程与 Flow >>>

  • Scope:CoroutineScope + SupervisorJob;结构化并发
  • 构建器:launch/asyncwithContext(Dispatchers.IO)
  • 取消:协作检查 isActivewithTimeout 超时
  • Flow:flow { emit(..) }debounce/mapLatest/combine
  • 作用域:coroutineScope vs supervisorScope(失败隔离)
  • 异常:CoroutineExceptionHandler;结构化传播
  • 上下文:flowOn 切换上游线程;buffer/conflate
  • 终端:catch/retryWhen/onCompletion
  • 热/冷:StateFlow/SharedFlowstateIn/shareIn

委托与值类型 >>>

  • 委托:class C(b: B) : B by b 组合优先
  • 值类型:@JvmInline value class 轻量包装(避免装箱)
  • 属性委托:by lazyDelegates.observable
  • vetoable:Delegates.vetoable 拦截写入
  • Map 委托:class User(map: Map<String,Any>){ val name: String by map }
  • provideDelegate:自定义委托绑定逻辑
  • Value class 约束:单属性、无 init;泛型处可能装箱

空安全与类型系统 >>>

  • 可空类型:String?;安全调用:?.;Elvis:?:
  • 安全转型:as?;非空断言:!!(避免滥用)
  • 智能类型转换:is 判定后自动 smart cast
  • 平台类型(JVM):从 Java 导入的可空性未知,避免直接 !!,建议检查
  • 链式:a?.b?.c + let { } 安全使用
  • Elvis 与控制流:val x = y ?: return/throw
  • 基本/顶级类型:Any/Any?UnitNothing
  • 断言工具:require/check/error 报错与前置校验

函数与 Lambda >>>

  • 默认/命名参数、可变参数 vararg;尾随 lambda
  • 高阶函数:函数类型 (A) -> B;函数引用 ::foo
  • 尾递归:tailrec fun fact(n:Int,...) 编译器优化
  • 内联:见下节;减少分配与提升性能(注意 inlining 开销)
  • 扩展函数类型:String.(Int) -> Unit 作为回调
  • SAM 转换:对 Java 单方法接口可简化 lambda
  • 函数引用:::fun/Class::method/::prop
  • vararg 展开:*array;中缀:infix fun

扩展与作用域函数 >>>

  • 扩展函数/属性:fun String.words(): List<String>
  • 作用域函数:let(返回 lambda 结果)、also(返回接收者)、apply(配置对象)、run/with
  • 选型建议:需要链式计算用 let/run;需要返回接收者用 also/apply
  • 避免滥用嵌套作用域导致可读性下降
  • 可空接收者扩展:fun String?.isNullOrBlank()
  • 遮蔽:成员优先于扩展;避免命名冲突
  • with 返回最后表达式;run/apply/also 差异对比

集合与序列 >>>

  • 集合:listOf/mutableListOfmapOf/mutableMapOfsetOf
  • 序列(惰性):sequence{}asSequence();适合大数据链式
  • 常用操作:map/filter/flatMap/groupBy/associatezip/chunked/windowed
  • 优先选择序列以减少中间集合分配;末端操作触发计算
  • 转换:toMutableList/toList;持久化集合(kotlinx.collections.immutable)
  • 序列构建:sequence { yield(...) }generateSequence
  • 惰性流水:asSequence().map{ }.filter{ }.toList()
  • Map 视图:mapKeys/mapValuesonEach 调试

泛型进阶 >>>

  • 型变:out 协变(只读生产者)、in 逆变(只写消费者)
  • 星投影:List<*> 表示未知类型参数
  • 边界:<T: Number>;多重边界 <T> where T: A, T: B
  • 实化参数:inline fun <reified T> find():T? 直接使用 T::class
  • JVM 类型擦除:运行期无泛型,reified 协助检查
  • 不变性:未声明型变时为不变,读写均受限

操作符/解构/数据类 >>>

  • 操作符重载:实现 operator fun plus/compareTo/get/set
  • 解构:实现 componentN() 或数据类自动生成
  • 数据类:自动 equals/hashCode/toString/copy 与解构
  • 中缀:infix fun 简化 DSL 表达(需单参数成员/扩展)
  • 约定:in/containsiteratorget/set
  • copy 浅拷贝:嵌套对象需自行深拷贝

枚举/密封/对象 >>>

  • 枚举:可定义属性/方法;用 when 穷尽匹配
  • 密封:sealed class/interface 受限层级便于穷尽检查
  • 对象:object 单例;companion object 伴生对象
  • 值类型:@JvmInline value class 轻量封装标量
  • 枚举扩展:枚举项可覆写属性/方法,entries 列举
  • 密封穷尽:配合 whenelse,更安全

注解与反射 >>>

  • 注解:@Retention/@Target/@Repeatable 等元注解
  • 反射:KClass、属性/函数引用;primaryConstructor
  • JVM 注解:@JvmOverloads/@JvmStatic/@JvmField 等互操作优化
  • 使用位置:@field:/@get:/@param: 指定作用域
  • 注意:反射存在运行期开销;必要时用 codegen 替代

序列化与时间库 序列化 时间

  • 序列化:@Serializable 数据类;Json 配置 ignoreUnknownKeys/encodeDefaults
  • API:Json.encodeToString(obj) / Json.decodeFromString<T>(str)
  • 注解:@SerialName 重命名;@Transient 忽略;多态需注册
  • 时间:Clock.System.now() 获取 InstantLocalDate/LocalDateTime
  • 时区:TimeZone.currentSystemDefault()Instant.toLocalDateTime(tz)

协程进阶 >>>

  • 异常:CoroutineExceptionHandler;结构化传播与 SupervisorJob
  • 作用域:viewModelScope/lifecycleScope(Android);withContext 切换 Dispatcher
  • 通道与共享流:ChannelStateFlowSharedFlow
  • 背压与缓冲:buffer/conflate/flowOn;终端操作 collect
  • 通道:Channel(capacity)send/receiveproduce 构建
  • 选择:select { } 多源选择(实验/高级)
  • SharedFlow/StateFlow:热流,replay 与粘性行为差异