如果您是当前正在学习Java的初学者,那么您已经知道基本元素,例如类,方法,枚举等。但是,在Java的Java节上发现了记录。本简短的教程将向您解释Java中有哪些记录,以及有关如何在下一个项目中使用它的一些提示。
本教程中的所有信息均基于Java 16 records Dokumentation以及我自己的经验。
什么是记录?
简单地解释的是抽象Java Bean的记录。记录会自动定义构造函数的全部论点,并让公众访问记录的所有遗产。记录本身没有其他方法。它只是一个愚蠢的 Java对象,而没有其他功能。
如何实现记录?
ue枚举记录可以是Java类的一部分或表示独立文件。
例如,我们想定义休息时间。休息时间由热爱者(分子)和分母组成。如果我们想将此对象写为Java类,则看起来像这样:
public class Fraction {
private double numerator;
private double denominator;
public Fraction() {
this.numerator = 0.0;
this.denominator = 1.0;
}
public Fraction(double numerator, double denominator) {
this.numerator = numerator;
this.denominator = denominator;
}
public void setNumerator(double numerator) {
this.numerator = numerator;
}
public double getNumerator() {
return this.numerator;
}
public void setDenominator(double denominator) {
this.denominator= denominator;
}
public double getDenominator() {
return this.denominator;
}
}
您可以看到,这只是描述一个具有两个属性的类的代码。现在让我们看看与记录相同的事情:
public record Fraction(double numerator, double denominator) {}
简短,对吗?这是使用记录的最重要原因。该行使用所有参数构造函数和两个公共属性分子和分母。
如果您想创建此唱片的新实例,您可以像优秀的课程一样做。
Fraction fractionAsRecord = new Fraction(0.0, 1.0);
覆盖构造函数和Getter/setter
如果预定义的构造函数和getter/setters方法不明智地使用您的用例,则也可以将其写下来。对于构造函数,您想按下以下操作:
public record Fraction(double numerator, double denominator) {
public Fraction(double numerator, double denominator) {
if (numerator == 0 && denominator == 0) {
throw new java.lang.IllegalArgumentException(
"Invalid fraction: " + numerator + "/" + denominator
);
}
this.numerator = numerator;
this.denominator = denominator;
}
}
您可以看到,在这里不知道覆盖注释。对于double numerator()
或void numerator(double numerator)
的方法也可以做同样的方法。
静态属性和方法
现在,我们来到了记录的扩展功能。记录使您有可能定义静态属性和静态方法。就我们的示例而言,我们希望通过两个值分开。我们可以为此实现静态属性static double half = 2.0
和静态方法static Fraction divideByTwo(Fraction fr)
。
public record Fraction(double numerator, double denominator) {
static double half = 2;
public static Fraction divideByTwo(Fraction fr) {
return new Fraction(fr.numerator(), fr.denominator() * half);
}
}
可以使用Fraction.divideByTwo(fraction)
访问上面列出的方法。如您所见,只要这些是静态的,就可以使用通常的方法来扩展记录。使用记录时,这为您提供了更大的灵活性。
其他好的功能
在java 16 Dokumentation中,其他许多扩展的功能是,我在此简短等待,但不要详细响应所有人。您可以在刚刚提到的“记录类的功能”部分中找到它们。
对我个人而言,选择是记录可以实现最美丽的接口。例如,您可以为一组记录定义一些基本方法。我给您一个简短的示例Mathobject
:
public interface Mathobject {
public Mathobject divideByTwo();
}
如果我们实现了该接口的分数记录,我们可以描述我们的静态方法divideByTwo
。然后看起来像这样:
public record Fraction(double numerator, double denominator) implements Mathobject {
static double half = 2;
@Override
public Fraction multiplyByTwo() {
return new Fraction(numerator, denominator * half);
}
}
记录写下接口Mathobject
的方法,让我们使用该方法中的两个分数属性,因为这不再是静态的。
文凭
记录最终要做什么?
它们产生的锅炉板代码较少。
此外,每个经验丰富的Java开发人员都知道记录的原理,因此可以轻松理解此视觉代码。因此,您的代码变得更加全面,更有专制。
最重要的是您必须撰写更少的代码的方面,这会节省时间。
保持编码。