为什么学习 Kotlin¶
Kotlin 是 JetBrains 设计的一门现代静态类型语言。它可以运行在 JVM 上,也可以编译到 JavaScript、Native 和多平台目标。对大多数后端、Android 和已有 Java 项目的开发者来说,最重要的是:Kotlin 能与 Java 高度互操作,同时用更强的类型系统和更简洁的语法减少样板代码。
Kotlin 解决了什么问题¶
Java 很稳定、生态强大,但一些常见问题长期存在:
- 空指针异常通常要靠代码审查、注解或测试兜底。
- 简单数据模型需要写构造器、getter、
equals()、hashCode()、toString()。 - 集合处理常常需要样板循环,或者依赖 Stream API。
- 表达式能力较弱,例如
if、switch在传统 Java 中主要是语句。 - 默认可继承的类和方法容易扩大继承面。
Kotlin 并不是抛弃 Java 生态,而是试图把这些问题前移到语言层面处理:
- 类型系统区分可空与非空。
data class自动生成常见数据方法。- 扩展函数、Lambda、高阶函数让 API 更容易组合。
if、when、try等结构可以作为表达式使用。- 类默认
final,继承必须显式声明。
与 Java 的关系¶
Kotlin/JVM 编译后的代码运行在 JVM 上,可以调用 Java 类库,也可以被 Java 调用。这意味着你不需要一次性重写已有系统。常见迁移方式是:
- 在 Java 项目中新增 Kotlin 模块或 Kotlin 文件。
- 从工具类、DTO、测试代码、边界层开始迁移。
- 逐步引入空安全、数据类、扩展函数和协程。
- 保留成熟的 Java 框架,例如 Spring、JUnit、Jackson、Hibernate。
Kotlin 的学习重点¶
如果你来自 Java,学习 Kotlin 不要只看语法糖。真正重要的是下面几类变化:
| 主题 | Kotlin 变化 | Java 开发者要注意 |
|---|---|---|
| 空安全 | String 与 String? 是不同类型 |
不要把 !! 当成“快速修复” |
| 变量 | val 只表示引用不可重新赋值 |
val list = mutableListOf() 仍然可以修改列表内容 |
| 函数 | 函数是一等概念,可以顶层声明 | 不必为所有工具函数创建 Util 类 |
| 类 | 主构造函数写在类头部 | 属性声明经常同时定义构造参数和 getter |
| 继承 | 类和方法默认不可继承 | 框架代理、Mock、ORM 场景可能需要额外配置 |
| 集合 | 区分只读接口和可变接口 | List<T> 不等于真正不可变集合 |
| 表达式 | if、when 可返回值 |
可以减少临时变量和重复赋值 |
推荐学习路径¶
- 掌握基础语法、变量、函数、字符串模板。
- 理解类型系统和空安全。
- 学习控制流、集合和 Lambda。
- 学习类、对象、数据类、密封类。
- 学习 Java 互操作,包括平台类型和注解。
- 根据实际场景学习协程、Kotlin/JVM、Kotlin Multiplatform 或 Android。
参考¶
- Kotlin 官方文档:https://kotlinlang.org/docs/home.html
- Kotlin Tour:https://kotlinlang.org/docs/kotlin-tour-welcome.html