record 关键字
1. 简介
record关键字会为类自动生成get,set,toString,equals方法,不用在手动创建模板类.
2.使用
record Employee(String name, int id) {}
public class BasicRecord {
public static void main(String[] args) {
var bob = new Employee("Bob", 11);
var dot = new Employee("Dorothy Gale", 9);
System.out.println(bob.name());
System.out.println(bob.id());
System.out.println(bob);
var map = Map.of(bob, "A", dot, "B");
System.out.println(map);
}
}
使用record关键字后,会自动生成private final 类型的name和id字段,以及name(),id()方法,还有生成equals和toString方法,节省了很多操作.
record类也可以继承接口,比如:
interface Star{
double brightness();
double density();
}
record RedDwarf(double brightness) implements Star{
public double density() {
return 0.00;
}
}
因为构造函数已经加入了brightness参数,所以只需要重写desity方法即可.
record关键字也可以自己定义构造方法,可以使用紧凑构造器,比如:
record Point(int x, int y) {
void assertPositive(int val) {
if(val < 0) {
throw new IllegalArgumentException();
}
}
Point{
assertPositive(x);
assertPositive(y);
}
}
record PlusTen(int x) {
PlusTen{
x += 10;
}
}
Point {} 中我们验证了x和y,PlusTen中,我们把参数增加了10.虽然构造器也能实现,但是限制比较多,参数名还必须一样,所以最好用紧凑构造器.