1. 概述
在这个教程中,我们将了解Java中的记录类(Record)和最终类(Final Class)之间的区别。
2. 记录类是什么?
记录类是一种特殊的类,作为不可变数据的透明载体。它们是不可变类(所有字段都是final
),并且隐式地是不可扩展的类。
编写记录类时,我们需要记住一些限制:
一个记录类的声明包括名称、类型参数(如果记录是泛型的)、包含记录组件的头和主体:
public record Citizen (String name, String address) {}
Java编译器会自动生成私有、最终字段、getter、公共构造函数以及equals
、hashCode
和toString
方法。
此外,我们还可以在记录主体中添加实例方法,以及静态字段和方法:
public record USCitizen(String firstName, String lastName, String address) {
static int countryCode;
// static initializer
static {
countryCode = 1;
}
public static int getCountryCode() {
return countryCode;
}
public String getFullName() {
return firstName + " " + lastName;
}
}
上述记录包含一个静态字段、一个静态方法和一个实例方法。
3. 最终类是什么?
最终类不能被扩展。它们使用final
关键字声明:
final class Rectangle {
private double length;
private double width;
// Rest of the body
}
由于它是最终类,我们无法创建另一个类来扩展Rectangle
类。
4. 区别在哪里?
记录类本身也是最终类。然而,与常规最终类相比,记录类有更多约束。另一方面,在某些情况下,记录类使用起来更为方便,因为它们可以在一行内声明,并且编译器会自动生成其他内容。如果我们需要一个简单的不可变数据载体,且不需要从其他类继承,那么可以使用记录类。
5. 总结
在这篇短文中,我们了解了Java中记录类和最终类的区别。
如往常一样,本文使用的代码示例可在GitHub上找到。