从 Java 到 Kotlin:你会如何重写这个类?
Source: Dev.to
理解此类的作用
在转向 Kotlin 之前,先拆解一下这段 Java 类到底包含了什么:
- 两个 private 字段(
codigo和nome),通过构造函数进行赋值 - 两个 带默认值的 private 字段(
numero = 0和texto = "EscolaX")
一个 构造函数 接收 codigo 和 nome 作为参数,并使用 this 进行赋值。
第一步:类声明
Java
public class AlunoJava { ... }
Kotlin
类默认是 public,因此不需要 public 关键字:
class AlunoKotlin { ... }
✅ 不需要 public —— 从一开始就少了样板代码。
第二步:构造函数
Java 构造函数
public AlunoJava(String codigo, String nome) {
this.codigo = codigo;
this.nome = nome;
}
Kotlin 主构造函数(在类头部声明)。在参数前加 val 或 var 会自动创建字段:
class AlunoKotlin(private val nome: String, private val codigo: String) {
// nome 和 codigo 已经在这里声明并赋值!
}
✅ 构造函数声明、字段声明以及赋值全部在 一行 完成。
第三步:val 与 var
val→ 不可变(相当于 Java 的final)——初始化后值不能再被重新赋值。var→ 可变——以后可以修改值。
因为原始 Java 类在构造后不再重新赋值 codigo 或 nome,使用 val 更符合原意,也更具 Kotlin 风格。
第四步:带默认值的字段
Java 字段
private int numero = 0;
private String texto = "EscolaX";
Kotlin 等价写法(类型推断会自动生效):
private var numero = 0 // 推断为 Int
private var texto = "EscolaX" // 推断为 String
✅ 这里使用 var,因为这些字段以后可能会被修改(在 Java 中它们不是 final)。
最终结果
把所有内容组合起来:
class AlunoKotlin(private val nome: String, private val codigo: String) {
private var numero = 0
private var texto = "EscolaX"
}
并排对比
Java(17 行)
public class AlunoJava {
private String codigo;
private String nome;
private int numero = 0;
private String texto = "EscolaX";
public AlunoJava(String codigo, String nome) {
this.codigo = codigo;
this.nome = nome;
}
}
Kotlin(3 行)
class AlunoKotlin(private val nome: String, private val codigo: String) {
private var numero = 0
private var texto = "EscolaX"
}
行为相同。代码量只有原来的几分之一。 🎯
关键要点
| Java 概念 | Kotlin 等价写法 |
|---|---|
public class | class(默认 public) |
| 单独的构造函数块 | 类头部的主构造函数 |
this.x = x 赋值 | 构造函数参数中的 val/var |
private String x | private val x: String |
类型在名前(String x) | 类型在名后(x: String) |
final 字段 | val |
| 可变字段 | var |
结论
Kotlin 旨在消除 Java 的冗余代码,同时保持清晰度。只要熟悉主构造函数语法以及 val/var 的区别,大多数简单的 Java 类都可以自然地转写为 Kotlin —— 并且代码会更短。