record类是JavaSE-16才支持的。
Java的一个record类是一组固定值的不可改变的、透明的载体。
java编译器可以自动为record生成构造函数、为所有字段生成getter函数、自动生成equals(Object obj)、hashCode()、toString()。
代码示例:
定义了一个Circle类,里边没有显式定义任何函数:
package com.thb;
public record Circle(int x, int y, int radius) {}
然后定义了一个Test2 进行调用:
package com.thb;
public class Test2 {
public static void main(String[] args) {
Circle circle = new Circle(0, 0, 2);
System.out.println("x = " + circle.x());
System.out.println("y = " + circle.y());
System.out.println("radius = " + circle.radius());
System.out.println("circle object: " + circle);
}
}
输出结果:
也可以在record类中显示定义构造函数和普通函数:
package com.thb;
public record Circle(int x, int y, int radius) {
public Circle(int x, int radius) {
this(x, x, radius);
}
public double calculateArea() {
return Math.PI * Math.pow(radius, 2);
}
}
package com.thb;
public class Test2 {
public static void main(String[] args) {
Circle circle = new Circle(0, 2);
System.out.println("x = " + circle.x());
System.out.println("y = " + circle.y());
System.out.println("radius = " + circle.radius());
System.out.println("circle object: " + circle);
System.out.println("area = " + circle.calculateArea());
}
}
输出结果: