Java ↔ Kotlin 速查对照表


变量与类型

// Java
String name = "Kotlin";
final int age = 25;
int count;  // 基本类型,默认值0
// Kotlin
val name = "Kotlin"        // 不可变,自动推断 String
var age = 25               // 可变 Int
val score: Double = 98.5    // 显式声明类型
const val MAX = 100         // 编译期常量

函数

// Java
public int add(int a, int b) {
    return a + b;
}
// Kotlin
fun add(a: Int, b: Int): Int = a + b

// 默认参数
fun greet(name: String, prefix: String = "Hello") = "$prefix, $name"

// 可变参数
fun sum(vararg numbers: Int) = numbers.sum()

字符串

// Java
String msg = "Hello, " + name + "!";
String s = "abc".substring(0, 2);
String[] arr = "a,b".split(",");
// Kotlin
val msg = "Hello, $name!"
val len = "Length: ${name.length}"
val s = "abc".substring(0, 2)
val arr = "a,b".split(",")
val joined = listOf("a","b").joinToString("-")

空安全

// Java
if (str != null && !str.isEmpty()) {
    System.out.println(str.length());
}
String result = (obj != null) ? obj.getName() : "default";
// Kotlin
str?.length                          // 安全调用,null 返回 null
str?.length ?: 0                     // Elvis 操作符
str!!.length                         // 非空断言,null 抛异常
val result = obj?.name ?: "default"  // 判空 + 默认值

条件控制

// Java
int max = (a > b) ? a : b;
switch (x) {
    case 1: System.out.println("one"); break;
    default: System.out.println("other");
}
// Kotlin
val max = if (a > b) a else b

when (x) {
    1 -> println("one")
    in 2..10 -> println("range")
    is String -> println("string")
    else -> println("other")
}

// when 作为表达式
val result = when (x) {
    1 -> "one"
    else -> "other"
}

循环

// Java
for (int i = 0; i < 5; i++) { }
for (String item : list) { }
for (Map.Entry<K, V> e : map.entrySet()) { }
// Kotlin
for (i in 0..4) { }
for (item in list) { }
for ((k, v) in map) { }
for (i in 0 until 5 step 2) { }  // 0,2,4

集合创建

// Java
List<String> list = new ArrayList<>();
list.add("a");
Map<String, Integer> map = new HashMap<>();
map.put("a", 1);
// Kotlin
val list = listOf("a", "b")
val mutable = mutableListOf("a", "b")
val map = mapOf("a" to 1, "b" to 2)
val mutableMap = mutableMapOf("a" to 1)

集合遍历

// Java
for (String item : list) {
    System.out.println(item);
}
for (Map.Entry<String, Integer> e : map.entrySet()) {
    System.out.println(e.getKey() + ":" + e.getValue());
}
// Kotlin
list.forEach { println(it) }
list.forEachIndexed { i, v -> println("$i: $v") }
for ((k, v) in map) println("$k: $v")

集合过滤/转换

// Java
List<Integer> evens = new ArrayList<>();
for (Integer n : numbers) {
    if (n % 2 == 0) evens.add(n);
}
List<String> upper = new ArrayList<>();
for (String s : list) upper.add(s.toUpperCase());
// Kotlin
val evens = numbers.filter { it % 2 == 0 }
val upper = list.map { it.uppercase() }
val pair = list.map { it to it.length }.toMap()

Lambda 表达式

// Java
list.sort((a, b) -> a.compareTo(b));
list.forEach(item -> System.out.println(item));
// Kotlin
list.sortWith(compareBy { it })
list.forEach { println(it) }
list.filter { it > 0 }.map { it * 2 }

类型转换

// Java
String s = (String) obj;
if (obj instanceof String) {
    String str = (String) obj;
}
// Kotlin
val s = obj as String
val str = obj as? String  // 安全转换,失败返回 null

异常处理

// Java
try {
    int r = 10 / 0;
} catch (ArithmeticException e) {
    e.printStackTrace();
} finally {
    System.out.println("done");
}
// Kotlin
try {
    val r = 10 / 0
} catch (e: ArithmeticException) {
    println(e.message)
} finally {
    println("done")
}

// throw 是表达式
val result = try {
    input.toInt()
} catch (e: NumberFormatException) {
    0
}

枚举

// Java
enum Color { RED, GREEN, BLUE }

// 使用
Color c = Color.RED;
// Kotlin
enum class Color { RED, GREEN, BLUE }
enum class Status(val code: Int) {
    SUCCESS(200),
    ERROR(500);
}

静态方法 / 单例

// Java 静态方法
public class Utils {
    public static int max(int a, int b) { return Math.max(a, b); }
}
// 调用: Utils.max(a, b)

// 单例
public class AppConfig {
    private static final AppConfig instance = new AppConfig();
    public static AppConfig getInstance() { return instance; }
}
// Kotlin — 顶层函数(推荐)
fun max(a: Int, b: Int) = if (a > b) a else b
// 调用: max(a, b)

// 单例
object AppConfig {
    val version = "1.0"
    fun init() { }
}
// 调用: AppConfig.version / AppConfig.init()

类的创建与继承

// Java
public class Animal {
    private String name;
    public Animal(String name) { this.name = name; }
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
}
public class Dog extends Animal {
    public Dog(String name) { super(name); }
}
// Kotlin
class Animal(val name: String)

open class Animal2(val name: String) {
    open fun sound() = "..."
}
class Dog(name: String) : Animal2(name) {
    override fun sound() = "汪"
}

// 数据类
data class User(val id: Int, val name: String)

接口实现

// Java
public interface ClickListener {
    void onClick(View v);
}
public class MyActivity implements ClickListener {
    @Override
    public void onClick(View v) { }
}
// Kotlin
interface ClickListener {
    fun onClick(view: View)
}
class MyActivity : ClickListener {
    override fun onClick(view: View) { }
}

延迟初始化

// Java
private UserService service;  // 初始 null,需自行判空

// Kotlin
lateinit var service: UserService   // 用前必须赋值,否则抛异常

val lazyService: UserService by lazy { UserService() }  // 首次访问时初始化

可变参数

// Java
public void printAll(String... args) {
    for (String arg : args) System.out.println(arg);
}
// Kotlin
fun printAll(vararg args: String) {
    args.forEach { println(it) }
}

内联类(类型安全)

// Java — 没有直接对应,通常用包装类
// UserId 和 OrderId 都是 Long,无法区分

// Kotlin
@JvmInline
value class UserId(val value: String)
@JvmInline
value class OrderId(val value: String)

fun findUser(id: UserId) { }
findUser(UserId("123"))  // 类型安全

伴生对象(静态成员)

// Java
public class MyClass {
    public static final String TAG = "MyClass";
    public static MyClass newInstance() { return new MyClass(); }
}
// Kotlin
class MyClass {
    companion object {
        const val TAG = "MyClass"       // 编译期常量
        fun newInstance() = MyClass()
    }
}
// 调用: MyClass.TAG / MyClass.newInstance()

建造者模式 / 链式调用

// Java
AlertDialog dialog = new AlertDialog.Builder(context)
    .setTitle("Title")
    .setMessage("Message")
    .setPositiveButton("OK", null)
    .create();
// Kotlin — 用 apply / also
val dialog = AlertDialog.Builder(context).apply {
    setTitle("Title")
    setMessage("Message")
    setPositiveButton("OK", null)
}.create()

val list = mutableListOf<Int>().also {
    it.add(1)
    it.add(2)
}

Getter/Setter 自定义

// Java
private int score;
public int getScore() { return score * 10; }
public void setScore(int value) { this.score = value; }
// Kotlin
var score: Int = 0
    get() = field * 10
    set(value) { field = value }

导航运算符(链式判空)

// Java
String name = (user != null && user.getProfile() != null)
    ? user.getProfile().getName() : null;

// Kotlin
val name = user?.profile?.name
val city = user?.address?.city ?: "未知"
val name2 = user!!.profile!!.name  // 强制非空,慎用

when 强大用法

// Java — 只能匹配常量/枚举/int
switch (status) {
    case 1: result = "成功"; break;
    case 2: result = "失败"; break;
    default: result = "未知";
}
// Kotlin — 匹配任意类型/范围/类型
val result = when (status) {
    1 -> "成功"
    2 -> "失败"
    in 3..10 -> "范围"
    is String -> "字符串: $status"
    null -> "空"
    else -> "未知"
}

// when 作为条件
val desc = when {
    x > 0 && y > 0 -> "第一象限"
    x < 0 && y > 0 -> "第二象限"
    else -> "其他"
}

区间判断

// Java — 没有区间概念,用 && 连接
if (x >= 0 && x <= 100) { }
// Kotlin
if (x in 0..100) { }
when (x) {
    in 1..10 -> "小"
    in 11..100 -> "中"
    !in 1..1000 -> "超出范围"
}

// 遍历区间
for (i in 0..100 step 5) { }       // 0,5,10...100
for (i in 100 downTo 0 step 10) { }

运算符重载

// Java — 不支持运算符重载

// Kotlin — 常用运算符对应方法
a + b     → a.plus(b)
a - b     → a.minus(b)
a * b     → a.times(b)
a / b     → a.div(b)
a % b     → a.mod(b)
a == b    → a?.equals(b) ?: (b === null)
a..b      → a.rangeTo(b)
a in list → list.contains(a)

// 自定义
class Point(var x: Int, var y: Int) {
    operator fun plus(other: Point) = Point(x + other.x, y + other.y)
}

协程基础

// Java — 传统线程/Executor
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.execute(() -> {
    try {
        String result = api.getData();
        runOnUiThread(() -> textView.setText(result));
    } catch (Exception e) { }
});
// Kotlin — 协程
viewModelScope.launch {
    val data = withContext(Dispatchers.IO) { api.getData() }
    withContext(Dispatchers.Main) {
        textView.text = data
    }
}

// async + await 并行
viewModelScope.launch {
    val user = async { api.getUser() }
    val posts = async { api.getPosts() }
    combine(user.await(), posts.await()) { u, p -> ... }
}

// Flow 冷流
fun getUsers(): Flow<List<User>> = flow {
    emit(api.getUsers())
}.flowOn(Dispatchers.IO)

常用操作符速查

操作符 Java Kotlin
判空默认值 ? : ?:
安全调用 手动判空 ?.
非空断言 !!
引用比较 == ===
值比较 .equals() ==
范围 >= && <= .. / in
类型判断 instanceof is
类型转换 (Type) as / as?
位运算 & | ^ and() or() xor()

更多推荐