Kotlin 极简教程(9)- 数据类
程序员文章站
2022-05-26 19:30:21
...
数据类是一种非常强大的类,可以避免重复创建 Java 中的用于保存状态但又操作非常简单的 POJO 的模版代码,它们通常只提供了用于访问它们属性的简单的 getter 和 setter
定义一个新的数据类非常简单,例如
data class Point(val x: Int, val y: Int)
数据类默认地为开发者重载了几个方法,包括 getter、setter(需要是 var)、componentN()、copy() 、toString()、hashCode()、equals()等方法
可以利用 IDEA 来反编译查看 Point 类的 Java 实现,了解其内部实现
public final class Point {
private final int x;
private final int y;
public final int getX() {
return this.x;
}
public final int getY() {
return this.y;
}
public Point(int x, int y) {
this.x = x;
this.y = y;
}
public final int component1() {
return this.x;
}
public final int component2() {
return this.y;
}
@NotNull
public final Point copy(int x, int y) {
return new Point(x, y);
}
// $FF: synthetic method
// $FF: bridge method
@NotNull
public static Point copy$default(Point var0, int var1, int var2, int var3, Object var4) {
if ((var3 & 1) != 0) {
var1 = var0.x;
}
if ((var3 & 2) != 0) {
var2 = var0.y;
}
return var0.copy(var1, var2);
}
public String toString() {
return "Point(x=" + this.x + ", y=" + this.y + ")";
}
public int hashCode() {
return this.x * 31 + this.y;
}
public boolean equals(Object var1) {
if (this != var1) {
if (var1 instanceof Point) {
Point var2 = (Point)var1;
if (this.x == var2.x && this.y == var2.y) {
return true;
}
}
return false;
} else {
return true;
}
}
}
通过数据类,简化了很多的通用操作,可以很方便地进行:格式化输出变量值、映射对象到变量、对比变量之间的相等性、复制变量等操作
fun main(args: Array<String>) {
val point1 = Point(10, 20)
val point2 = Point(10, 20)
println("point1 toString() : $point1")
println("point2 toString() : $point2")
println()
val (x, y) = point1
println("point1 x is $x,point1 y is $y")
println()
//在 kotlin 中,“ == ” 相当于 Java 的 equals 方法
//而 “ === ” 相当于 Java 的 “ == ” 方法
println("point1 == point2 : ${point1 == point2}")
println("point1 === point2 : ${point1 === point2}")
println()
val point3 = point1.copy(y = 30)
println("point3 toString() : $point3")
}