龙空技术网

Java 16 新特性:record类

码农看看 162

前言:

此刻各位老铁们对“record”大体比较看重,咱们都想要学习一些“record”的相关知识。那么小编同时在网上汇集了一些有关“record””的相关内容,希望咱们能喜欢,咱们快快来了解一下吧!

以前我们定义类都是用class关键词,但从Java 16开始,我们将多一个关键词record,它也可以用来定义类。record关键词的引入,主要是为了提供一种更为简洁、紧凑的final类的定义方式。

下面就来具体了解record类的细节。

声明record类

声明record类的基础语法:

record range(int start, int end){}

我们知道class类可以在单独文件中生命,也可以在其他类中申明。那么record类也一样,它有这几种申明方式:

单独文件申明:

public record range(int start, int end){}
在类内部申明:
public class DidispaceTest {    public record range(int start, int end){}}
函数内申明:
public class DidispaceTest {  public void test() {    public record range(int start, int end){}  }}

如果你还想了解更多关于Java新特性的内容的话,长期连载的免费Java新特性专栏:,文档形式学习Java新特性,阅读学习体验更佳!

record类详解

在知道了如何申明之后,你一定会想用record申明的就那么点元素,它到底会具备什么能力呢?

因为record关键词申明类主要是为了简化一些类的申明,所以它本质就是一类特殊的class,或者说是某一个模版的class。

record申明的类,具备这些特点:

它是一个final自动实现equalshashCodetoString函数成员变量均为public属性

所以,对于之前写的range类,它等价于一个这样的类:

public final class range{    final int start;    final int end;    public range(int start, int end) {        this.start = start;        this.end = end;    }    @Override    public boolean equals(Object o) {        if (this == o) return true;        if (o == null || getClass() != o.getClass()) return false;        range range = (range) o;        return start == range.start && end == range.end;    }    @Override    public int hashCode() {        return Objects.hash(start, end);    }    @Override    public String toString() {        return "range{" +                "start=" + x +                ", end=" + y +                '}';    }    public int start(){        return start;    }    public int end(){        return end;    }}

因为一些函数是隐藏的,在range定义的时候,我们看不到,所以我们可以尝试写这样一段测试代码来验证一下:

range r = new range(100, 200);
定义成员函数

因为record申明的本质也是类,那么定义成员函数肯定也是可以的。

比如,我们可以这样在record类中定义成员函数:

record range(int start, int end){  int distance(){    return end - start;  }}

然后,就可以这样调用它:

range r = new range(100, 200);r.distance();

如果您学习过程中如遇困难?可以加入我们超高质量的技术交流群,参与交流与讨论,更好的学习与进步!另外,不要走开,关注我,持续更新Java新特性专栏!

标签: #record