JAVA15.JDK15.6 Record二次预览特性

第六讲Record

视频课:https://edu.****.net/lecturer/1516

历史渊源:

JEP359:

JEP384:

​ 疫情原因,欧美程序员没有变化。

​ 2019,java语言架构师,Brian Goetz,“太啰嗦、繁文缛节”。创建纯粹的数据类,大量低价值、重复、易出错的代码:构造方法、getter/setter、equals、hashCode()、ToString()。

一.概念

是一种轻量级的class,可以看作数据结构体,是一种形式受限制的类。

public class Person {
    private int id;
    private  String name;
    //合作者:搭档;
    private Person parter;
    
    public Person getParter() {
        return parter;
    }
    public void setParter(Person parter) {
        this.parter = parter;
    }
    public Person(int id, String name) {
        this.id = id;
        this.name = name;
    }
    public Person(int id, String name, Person parter) {
        this.id = id;
        this.name = name;
        this.parter = parter;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Override
    public String toString() {
        return "Persson{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}

简化写法,Lombok,注解生成,构造方法、存取方法,代码看不到,调试有劣势。

二.语法

public record Person(int id,String name,Person parter) {
    
}

反编译之后:

public final class Person extends java.lang.Record {
    private final int id;
    private final java.lang.String name;
    private final Person parter;

    public Person(int id, java.lang.String name, Person parter) { /* compiled code */ }

    public final java.lang.String toString() { /* compiled code */ }

    public final int hashCode() { /* compiled code */ }

    public final boolean equals(java.lang.Object o) { /* compiled code */ }

    public int id() { /* compiled code */ }

    public java.lang.String name() { /* compiled code */ }

    public Person parter() { /* compiled code */ }
}

结论:

record字段都是final,初始化的设置,是不可改变的。

三.注意事项

3.1 不能继承自其他类

3.2不是使用abstract修饰

3.3 实例字段不允许,静态字段允许

3.4重写了equals()和hashCode()

3.5构造方法、静态方法、实例方法都允许存在;

四.具体使用

import java.util.HashSet;

public class TestPerson {
    public static void main(String[] args) {
        Person p1=new Person(1,"张三",new Person(2,"潇潇",null));
        System.out.println(p1.toString());
        System.out.println(p1.name());
        System.out.println(p1); //code 3
        System.out.println(p1.getClass());
        //HashSet来测试,是否重写了
        HashSet<Person>set=new HashSet<>();
        set.add(p1);

        Person p2=new Person(1,"张三",new Person(2,"潇潇",null));
        set.add(p2);

        //测试输出;JDK8 方法引用
        set.forEach(System.out::println);
    }
}

上一篇:Nginx+PostgreSQL+Django+UWSGI搭建


下一篇:JAVA15.JDK15.7 HiddenClass