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

相关文章
|
3天前
|
存储 Java
Java Scanner类详解与应用
Java Scanner类详解与应用
|
21小时前
|
Java 安全 索引
滚雪球学Java(48):面向对象编程中的StringBuffer类详解
【6月更文挑战第2天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
23 5
滚雪球学Java(48):面向对象编程中的StringBuffer类详解
|
2天前
|
搜索推荐 算法 Java
JAVA中的交换类排序算法详解
JAVA中的交换类排序算法详解
8 1
|
2天前
|
存储 Java 测试技术
滚雪球学Java(47):String类教程:如何在Java中使用字符串操作
【6月更文挑战第1天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
13 2
滚雪球学Java(47):String类教程:如何在Java中使用字符串操作
|
2天前
|
存储 安全 Java
深入理解Java堆栈:机制、特性与应用
深入理解Java堆栈:机制、特性与应用
6 1
|
2天前
|
JavaScript Java 测试技术
Java项目基于ssm+vue.js的网络类课程思政学习系统附带文章和源代码设计说明文档ppt
Java项目基于ssm+vue.js的网络类课程思政学习系统附带文章和源代码设计说明文档ppt
7 0
|
3天前
|
Java 编译器 API
Java语言新特性:探索Java的最新进展
Java语言新特性:探索Java的最新进展
|
3天前
|
安全 Java API
Java的特性
Java的关键特性包括:1) 跨平台能力,依赖JVM在不同系统上运行;2) 面向对象编程,通过类和对象实现代码的高复用和维护性;3) 内置的安全机制,如内存管理和异常处理,确保程序安全;4) 丰富的标准类库,提供各种API简化开发;5) 支持多线程,充分利用CPU资源。学习路线可从基础知识逐步深入到高级特性。
5 1
|
3天前
|
安全 前端开发 Java
Java语言中的类装载机制详解
Java语言中的类装载机制详解
|
6天前
|
Java 程序员
Java中的多线程编程:理解并应用Thread类和Runnable接口
【5月更文挑战第28天】在Java中,多线程编程是一个重要的概念,它允许同时执行多个任务。本文将深入探讨Java的多线程编程,包括Thread类和Runnable接口的使用,以及如何在实际项目中应用这些知识。我们将通过实例来理解这些概念,并讨论多线程编程的优点和可能的挑战。