Generated By AI

📗 1. 基本类型

类型 Kotlin 写法 Java 写法 简要说明
数字 Int, Long, Float, Double, Short, Byte int, long, float, double, short, byte Kotlin 数值类型映射到相应的原生/包装类型。
布尔 Boolean boolean 只能取 true/false,与数字不互通。
字符 Char char 单个 Unicode 字符,支持转义序列。
字符串 String String 不可变;支持多行文本块 """..."""
数组 Array<T>, IntArray T[] 提供原始类型专用数组如 IntArrayByteArray
无符号整型 UInt, ULong, UShort, UByte 编译时检查范围,运行时越界抛 IllegalArgumentException

📘 2. 语法对照

功能 Java 写法 Kotlin 写法 简要说明
变量定义 int x = 10; final String name = "Tom"; var x = 10 val name = "Tom" var 可变,val 只读;类型由编译器推断。
类 + 构造 public class P { P(String n) { ... } } class P(val name: String) 主构造中声明属性,自动生成字段 & 访问器。
数据类 手动写字段/构造/equals/toString data class User(val id: Int, val n: String) data 自动生成常用方法 & 解构组件。
函数定义 public int sum(int a, int b) { return a + b; } fun sum(a: Int, b: Int) = a + b 表达式函数可省略大括号和 return
空安全 if (s != null) len = s.length(); else len = 0; val len = s?.length ?: 0 String? 可空,?.?: 插入编译期空检查。
分支匹配 switch(x) { case 1: ... } when(x) { 1 -> ...; else -> ... } when 是表达式,支持范围 & 任意对象比较。
循环 & 集合 for(int i=0;i<10;i++)``list.stream().filter() for(i in 0 until 10)``list.filter{} 0 until 生成 IntRange;集合链式调用基于扩展函数。
单例 class S { private static S i=new S(); … } object S { fun foo() {} } object 编译时生成线程安全单例,无需额外样板。

✨ 3. 独有亮点

特性 示例 简要说明
默认 & 命名参数 fun g(msg: String = "Hi", name: String = "You") g(name="Tom") 编译器生成默认方法,命名参数避免重载歧义。
扩展函数 fun String.ex() = uppercase() 编译后为静态方法,第一个参数是接收者,调用如成员方法。
解构声明 val (x, y) = Point(1, 2) data class 自动生成 componentN(),一行取多值。
密封类 sealed class R; data class Ok(val d: String): R(); object Err: R() 限定子类范围,when 可做穷尽检查。
内联函数 inline fun <T> m(b: ()->T): T { … } 在调用处展开函数体,减少高阶函数的运行时开销。
集合构造器 listOf(1, 2), mutableListOf("A"), mapOf("a" to 1) 内建集合工厂函数,语法简洁;to 表示键值对。
数组构造器 arrayOf(1, 2), intArrayOf(1, 2) 支持泛型与原始类型数组,避免装箱。
表达式返回值 val max = if (a > b) a else b val result = try { … } catch { … } ifwhentry 都是表达式,可直接赋值。
区间语法 & 步进 for (i in 1..5), for (j in 1 until 5 step 2) .. 表闭区间,until 表半开,step 控制步长。
字符串模板 "Hello, $name" "Length: ${s.length}" $变量 可直接拼接,复杂表达式用 ${}
Lambda 尾随语法 list.filter { it > 0 }.map { it * 2 } 大括号可直接跟随函数调用,链式语法自然、简洁。

📚 4. 常用标准库函数

函数 用法示例 简要说明
let user?.let { print(it.name) } 非空时执行块,it 引用原对象。
apply User().apply { age = 18 } 在对象上执行块并返回该对象,常用于初始化。
also list.also { println("init") } 执行副作用并返回对象,常用于日志 / 调试。
run val r = run { compute(); result } 无接收者的作用域块,返回最后一行结果。
with with(cfg) { load(); validate() } 对象上下文块,this 指向接收者,返回结果。
takeIf str.takeIf { it.isNotBlank() } 条件为真返回对象,否则返回 null
sequence sequenceOf(1,2,3).map { … } 惰性集合处理,适合大规模数据管道。

🧩 5. 类型系统对比

功能 Java 写法 Kotlin 写法 简要说明
泛型 List<String> List<String> 支持协变 / 逆变(out / in)和 reified 泛型函数。
类型别名 typealias Name = String 简化复杂类型声明。
枚举类 enum Color { RED, GREEN } enum class Color { RED, GREEN } 支持在枚举中定义属性 & 方法。
内联类 @JvmInline value class USD(val amount: Int) 编译时包装或展开,零开销封装。

🔍 6. 类型检测与转换

功能 Java 写法 Kotlin 写法 简要说明
类型检查 if (obj instanceof String) if (obj is String) is 后自动智能转换,无需显式强转。
安全转换 (String) obj obj as String / obj as? String as? 安全转换失败返回 null
基本转换 Integer.parseInt(str) str.toInt(), toDouble(), toLong() 通过扩展函数提供常见类型转换。

🔄 7. 控制流程 & 异常

功能 Java 写法 Kotlin 写法 简要说明
条件 & 循环 if, switch, for, while, do-while if, when, for, while, do-while when 可做表达式,替代 switch
返回 & 跳转 return, break, continue, throw 同 Java 支持在 lambda 中局部返回,如 return@label
异常处理 try-catch-finally, checked exception try-catch-finally,无 checked exception Kotlin 不区分受检异常,简化错误处理。

📦 8. 包与导入

功能 Java 写法 Kotlin 写法 简要说明
包声明 package com.example; package com.example 不需要分号。
导入 import java.util.List; import java.util.List 支持导入顶层函数和属性。
别名导入 import foo.Bar as Baz 解决命名冲突或简化引用。

⚙️ 9. 面向对象相关

功能 Java 写法 Kotlin 写法 简要说明
接口默认实现 default void f() {} 接口中可直接写方法体 接口内方法可有实现,无需关键字。
抽象类 abstract class Shape { … } abstract class Shape { … } 抽象成员不需再加 abstract 前缀。
继承 & 覆写 class A extends B { @Override … } class A : B() { override fun … } : 表示继承,override 必显式标注。
可见性修饰符 public/protected/private public/protected/private/internal internal 表示同模块内可见。
内部类 class Outer { class Inner {} } class Outer { inner class Inner {} } 默认是静态嵌套,加 inner 变为非静态内部类。

🧵 10. 协程 vs 多线程

场景 Java 写法(线程/异步) Kotlin 写法(协程) 简要说明
启动任务 new Thread(() -> work()).start(); GlobalScope.launch { work() } 协程更轻量、省资源,适合大规模并发。
异步返回值 Future<Integer> f = exec.submit(...); val result = async { compute() }.await() 内建 async/await,语义更清晰。
延迟执行 Thread.sleep(1000) delay(1000) 非阻塞挂起,不占用线程。
结构化并发 手动管理线程池和生命周期 coroutineScope { … } 协程作用域自动管理生命周期,避免泄漏。

📦 11. 集合操作对比

功能 Java 写法(Stream) Kotlin 写法(扩展函数) 简要说明
过滤 list.stream().filter(x -> x > 0).collect(...) list.filter { it > 0 } 语法简洁,链式调用更直观。
映射 list.stream().map(x -> x * 2).collect(...) list.map { it * 2 } Lambda 简洁,扩展函数无额外依赖。
分组 Collectors.groupingBy(...) list.groupBy { it.key } 直接返回 Map<K, List<V>>,更易读。
排序 list.sort(Comparator.comparing(...)) list.sortedBy { it.prop } 函数式排序,链式可读性好。
聚合 reduce, sum, collect reduce, sumOf, fold 内建多种聚合函数,常用时无需额外导入。

持续更新中…

参考:

https://book.kotlincn.net/text/d-basics.html