Java 16 新特性:探索 Record 类,颠覆你的数据模型

简介: Java 16 新特性:探索 Record 类,颠覆你的数据模型

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

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

声明 record 类

声明 record 类的基础语法:

record range(int start, int end){}

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

  1. 单独文件申明:
public record range(int start, int end){}
  1. 在类内部申明:
public class RecordTest {
    public record range(int start, int end){}
}
  1. 函数内申明:
public class RecordTest {
  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新特性-记录Record

相关文章
|
14天前
|
存储 Java 索引
用Java语言实现一个自定义的ArrayList类
自定义MyArrayList类模拟Java ArrayList核心功能,支持泛型、动态扩容(1.5倍)、增删改查及越界检查,底层用Object数组实现,适合学习动态数组原理。
68 4
|
18天前
|
IDE JavaScript Java
在Java 11中,如何处理被弃用的类或接口?
在Java 11中,如何处理被弃用的类或接口?
113 5
|
22天前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
88 1
|
22天前
|
Java Go 开发工具
【Java】(8)正则表达式的使用与常用类分享
正则表达式定义了字符串的模式。正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。
145 1
|
22天前
|
存储 Java 程序员
【Java】(6)全方面带你了解Java里的日期与时间内容,介绍 Calendar、GregorianCalendar、Date类
java.util 包提供了 Date 类来封装当前的日期和时间。Date 类提供两个构造函数来实例化 Date 对象。第一个构造函数使用当前日期和时间来初始化对象。Date( )第二个构造函数接收一个参数,该参数是从1970年1月1日起的毫秒数。
100 1
|
22天前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
90 1
|
2月前
|
数据采集 存储 弹性计算
高并发Java爬虫的瓶颈分析与动态线程优化方案
高并发Java爬虫的瓶颈分析与动态线程优化方案
Java 数据库 Spring
103 0
|
2月前
|
算法 Java
Java多线程编程:实现线程间数据共享机制
以上就是Java中几种主要处理多线程序列化资源以及协调各自独立运行但需相互配合以完成任务threads 的技术手段与策略。正确应用上述技术将大大增强你程序稳定性与效率同时也降低bug出现率因此深刻理解每项技术背后理论至关重要.
151 16
|
3月前
|
缓存 并行计算 安全
关于Java多线程详解
本文深入讲解Java多线程编程,涵盖基础概念、线程创建与管理、同步机制、并发工具类、线程池、线程安全集合、实战案例及常见问题解决方案,助你掌握高性能并发编程技巧,应对多线程开发中的挑战。
下一篇
开通oss服务