关于java:Java-16-新特性record类

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

上面就来具体理解record类的细节。配套视频教程:Java 16 新个性:应用record申明类

申明record类

申明record类的根底语法:

record range(int start, int end){}

咱们晓得class类能够在独自文件中生命,也能够在其余类中申明。那么record类也一样,它有这几种申明形式:

  1. 独自文件申明:
public record range(int start, int end){}
  1. 在类外部申明:
public class DidispaceTest {
    public record range(int start, int end){}
}
  1. 函数内申明:
public class DidispaceTest {
  public void test() {
    public record range(int start, int end){}
  }
}

record类详解

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

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

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

  1. 它是一个final
  2. 主动实现equalshashCodetoString函数
  3. 成员变量均为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定义的时候,咱们看不到,所以咱们能够尝试写这样一段测试代码来验证一下:

@Test
public void test() {
  range r = new range(100, 200);
  log.info(r.toString());

  range r2 = new range(100, 200);
  log.info(String.valueOf(r.equals(r2)));
}

定义成员函数

因为record申明的实质也是类,那么定义成员函数必定也是能够的。

比方,咱们能够这样在record类中定义成员函数:

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

而后,就能够这样调用它:

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

如果您学习过程中如遇艰难?能够退出咱们超高品质的技术交换群,参加交换与探讨,更好的学习与提高!另外,不要走开,关注我,继续更新Java新个性专栏!

欢送关注我的公众号:程序猿DD。第一工夫理解前沿行业音讯、分享深度技术干货、获取优质学习资源

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理