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.虽然构造器也能实现,但是限制比较多,参数名还必须一样,所以最好用紧凑构造器.

 

posted @ 2023-05-03 22:41  随意的马蒂洛克  阅读(145)  评论(0编辑  收藏  举报