🚀 Kotlin 语法超详细解析(2025 最新)
------从基础到进阶,带你彻底掌握 Kotlin
Kotlin 是 Google 推荐的 Android 主力开发语言,也是 JVM 生态中最受欢迎的现代语言之一。它以简洁、安全、函数式编程友好而著称。本篇文章将系统性讲解 Kotlin 全语法体系,适用于 Android、后端(Ktor/Spring)、跨端开发者。
📌 目录
-
Kotlin 的语言特点
-
基础语法
-
变量、常量与类型系统
-
Null Safety(空安全)
-
函数(函数类型 / Lambda / 高阶函数)
-
类与对象(构造、继承、数据类、密封类)
-
集合及常用操作
-
扩展函数 & 扩展属性
-
对象声明与单例模式
-
委托(by 关键字)
-
泛型(协变 / 逆变)
-
协程(Coroutine)入门
-
Kotlin 常用语法糖与技巧
1. Kotlin 的语言特点
| 特性 | 描述 |
|---|---|
| 简洁 | 代码量比 Java 少 30%+ |
| 空安全 | 杜绝 NullPointerException |
| 完全兼容 Java | 运行在 JVM 上,可调用全部 Java 类库 |
| 函数式编程支持 | map/filter/reduce、lambda、高阶函数 |
| 协程 | 最强大的异步编程能力 |
| 扩展函数 | 可无侵入扩展类能力 |
| data class / sealed class | 状态建模特别常用 |
2. 基础语法
main 函数
fun main() {
println("Hello Kotlin")
}
注释
// 单行
/* 多行 */
/** 文档注释 */
3. 变量、常量、类型系统
可变与不可变
val name = "Tom" // 不可变
var age = 18 // 可变
类型推断
Kotlin 自动推断类型:
val number = 10 // Int
val message = "Hello" // String
显式声明:
val count: Int = 10
4. Null Safety(空安全)
Kotlin 最大的亮点之一。
可空类型
var name: String? = null
安全调用符 ?.
println(user?.name)
Elvis 操作符 ?:
val displayName = name ?: "Unknown"
非空断言 !!
val len = name!!.length // 若 name 为 null 会抛异常
let 使用(常用)
name?.let {
println("length = ${it.length}")
}
5. 函数
基本函数
fun add(a: Int, b: Int): Int {
return a + b
}
单表达式函数
fun add(a: Int, b: Int) = a + b
默认参数
fun greet(name: String = "Tom", age: Int = 18) { }
可变参数 vararg
fun sum(vararg nums: Int) { }
Lambda 表达式
val add = { a: Int, b: Int -> a + b }
高阶函数(函数作为参数)
fun operate(a: Int, b: Int, op: (Int, Int) -> Int): Int {
return op(a, b)
}
operate(1, 2, add)
operate(1, 2) { x, y -> x + y }
6. 类与对象
类定义
class Person(val name: String, var age: Int) {
fun speak() {
println("Hi, I'm $name")
}
}
主构造与次构造
class User(val name: String) {
var age: Int = 0
constructor(name: String, age: Int): this(name) {
this.age = age
}
}
继承
open class Animal {
open fun run() {}
}
class Dog: Animal() {
override fun run() {
println("Dog running")
}
}
7. 数据类(data class)
自动生成:
-
equals
-
hashCode
-
toString
-
copy
data class User(val name: String, val age: Int)
val u = User("Tom", 20)
val u2 = u.copy(age = 30)
8. 密封类 sealed class(状态机最常用)
sealed class Result {
data class Success(val data: String): Result()
data class Error(val msg: String): Result()
object Loading: Result()
}
fun handle(result: Result) = when(result) {
is Result.Success -> println(result.data)
is Result.Error -> println(result.msg)
Result.Loading -> println("loading")
}
9. 集合与常用操作
List / MutableList
val list = listOf(1, 2, 3)
val mut = mutableListOf(1, 2, 3)
Map
val map = mapOf("name" to "Tom")
常用操作(超强)
list.map { it * 2 }
list.filter { it > 1 }
list.any { it == 1 }
list.all { it > 0 }
list.reduce { acc, i -> acc + i }
链式调用:
users
.filter { it.age > 18 }
.sortedBy { it.age }
.map { it.name }
10. 扩展函数 / 属性
扩展函数
fun String.isEmail(): Boolean {
return this.contains("@")
}
"abc@test.com".isEmail()
扩展属性
val String.lastChar: Char
get() = this[this.length - 1]
11. 对象声明与单例模式
Kotlin 内置单例写法:
object Config {
val version = "1.0"
fun load() { }
}
调用:
Config.load()
12. 委托(by)
类委托
interface Printer {
fun print()
}
class SimplePrinter: Printer {
override fun print() = println("printing")
}
class SmartPrinter(printer: Printer): Printer by printer
属性委托
val lazyValue: String by lazy {
println("init")
"Hello"
}
13. 泛型 & 协变 / 逆变
泛型定义
class Box<T>(val value: T)
协变 out(只能生产)
interface Producer<out T> {
fun produce(): T
}
逆变 in(只能消费)
interface Consumer<in T> {
fun consume(item: T)
}
14. 协程(Coroutine)简介
Kotlin 的协程是 轻量级线程,是 Android 异步代码的核心。
launch
GlobalScope.launch {
delay(1000)
println("Done")
}
async / await
val result = async { getData() }
println(result.await())
withContext 切线程
withContext(Dispatchers.IO) {
saveToDB()
}
15. Kotlin 常用语法糖与技巧
apply / let / run / with / also
apply:配置对象
val p = Person().apply {
name = "Tom"
age = 20
}
let:避免空指针
name?.let {
println(it)
}
also:链式处理
val list = mutableListOf(1,2,3).also {
it.add(4)
}
when(更强大的 switch)
when(x) {
1 -> println("one")
in 2..5 -> println("range")
else -> println("other")
}
字符串模板
val msg = "name=$name age=${user.age}"
解构语法
val (name, age) = User("Tom", 20)
📌 总结
Kotlin 是一门现代、高效、安全且表达能力极强的语言,它的核心优势包括:
-
更安全的 Null Safety
-
更简洁的语法
-
扩展函数/data class/密封类 等专为业务逻辑建模打造
-
多范式(OOP + FP)混合
-
最强异步模型:协程