IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Kotlin与Java对照手册

    Raymond发表于 2025-04-24 08:23:42
    love 0

    Generated By AI

    📗 1. 基本类型

    类型Kotlin 写法Java 写法简要说明
    数字Int, Long, Float, Double, Short, Byteint, long, float, double, short, byteKotlin 数值类型映射到相应的原生/包装类型。
    布尔Booleanboolean只能取 true/false,与数字不互通。
    字符Charchar单个 Unicode 字符,支持转义序列。
    字符串StringString不可变;支持多行文本块 """..."""。
    数组Array<T>, IntArray 等T[]提供原始类型专用数组如 IntArray、ByteArray。
    无符号整型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/toStringdata 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 ?: 0String? 可空,?. 与 ?: 插入编译期空检查。
    分支匹配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 { … }if、when、try 都是表达式,可直接赋值。
    区间语法 & 步进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. 常用标准库函数

    函数用法示例简要说明
    letuser?.let { print(it.name) }非空时执行块,it 引用原对象。
    applyUser().apply { age = 18 }在对象上执行块并返回该对象,常用于初始化。
    alsolist.also { println("init") }执行副作用并返回对象,常用于日志 / 调试。
    runval r = run { compute(); result }无接收者的作用域块,返回最后一行结果。
    withwith(cfg) { load(); validate() }对象上下文块,this 指向接收者,返回结果。
    takeIfstr.takeIf { it.isNotBlank() }条件为真返回对象,否则返回 null。
    sequencesequenceOf(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) objobj as String / obj as? Stringas? 安全转换失败返回 null。
    基本转换Integer.parseInt(str)str.toInt(), toDouble(), toLong()通过扩展函数提供常见类型转换。

    🔄 7. 控制流程 & 异常

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

    📦 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/privatepublic/protected/private/internalinternal 表示同模块内可见。
    内部类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, collectreduce, sumOf, fold内建多种聚合函数,常用时无需额外导入。

    持续更新中…

    参考:

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



沪ICP备19023445号-2号
友情链接