Record

Record

背景

早在2019年2月份,Java 语言架构师 Brian Goetz,曾写文抱怨“Java太啰嗦”或有太多的“繁文缛节”。他提到:开发人员想要创建纯数据载体类(plain data carriers)通常都必须编写大量低价值、重复的、容易出错的代码。如:构造函数、getter/setter、equals()、hashCode()以及toString()等。

以至于很多人选择使用IDE的功能来自动生成这些代码。还有一些开发会选择使用一些第三方类库,如Lombok等来生成这些方法。

**JDK14中预览特性:神说要用record,于是就有了。**实现一个简单的数据载体类,为了避免编写:构造函数,访问器,equals(),hashCode () ,toString ()等,Java 14推出record。

record 是一种全新的类型,它本质上是一个 final 类,同时所有的属性都是 final 修饰,它会自动编译出 public gethashcodeequalstoString、构造器等结构,减少了代码编写量。

具体来说:当你用record 声明一个类时,该类将自动拥有以下功能:

  • 获取成员变量的简单方法,比如例题中的 name() 和 partner() 。注意区别于我们平常getter()的写法。
  • 一个 equals 方法的实现,执行比较时会比较该类的所有成员属性。
  • 重写 hashCode() 方法。
  • 一个可以打印该类所有成员属性的 toString() 方法。
  • 只有一个构造方法。

此外:

  • 还可以在record声明的类中定义静态字段、静态方法、构造器或实例方法。

  • 不能在record声明的类中定义实例字段;类不能声明为abstract;不能声明显式的父类等。

package April17.test;

/**
 * @Author JiaWen
 * @Date 2023/4/17 14:30
 * @PackageName:April17
 * @ClassName: Person
 * @Description:
 * @Version 1.0
 */
public record Person(String name, int age) {
    public static String nation;

    public static String showNation() {
        return nation;
    }

    public String getNameInUpperCase() {
        return name.toUpperCase();
    }
    //不可以声明非静态的属性
    //不可以将record定义的类声明为abstract的
    //不可以给record定义的类声明显式的父类(非Record类)
}

JDK15中第二次预览特性

JDK16中转正特性

最终到JDK16中转正。

记录不适合哪些场景

record的设计目标是提供一种将数据建模为数据的好方法。它也不是 JavaBeans 的直接替代品,因为record的方法不符合 JavaBeans 的 get 标准。另外 JavaBeans 通常是可变的,而记录是不可变的。尽管它们的用途有点像,但记录并不会以某种方式取代 JavaBean。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TFR Record是一种用于存储大量数据的二进制文件格式,通常用于TensorFlow的数据输入。TFR Record文件包含了一个或多个序列化的TensorFlow Example Protocol Buffer,每个Example包含一个或多个特征(feature)。TFR Record文件可以通过tf.data API进行读取和解析,以便进行模型训练和评估。 以下是一个生成TFR Record文件的Python脚本示例,假设我们有一个Pascal VOC格式的数据集,我们可以使用该脚本将其转换为TFR Record格式: ```python import os import tensorflow as tf from datasets import pascalvoc_to_tfrecords # 定义输入和输出路径 data_dir = '/path/to/pascalvoc/dataset' output_dir = '/path/to/output/directory' # 调用pascalvoc_to_tfrecords函数生成TFR Record文件 pascalvoc_to_tfrecords(data_dir, output_dir) # 读取TFR Record文件 dataset = tf.data.TFRecordDataset(os.path.join(output_dir, 'pascalvoc.tfrecord')) # 解析Example feature_description = { 'image/height': tf.io.FixedLenFeature([], tf.int64), 'image/width': tf.io.FixedLenFeature([], tf.int64), 'image/filename': tf.io.FixedLenFeature([], tf.string), 'image/source_id': tf.io.FixedLenFeature([], tf.string), 'image/encoded': tf.io.FixedLenFeature([], tf.string), 'image/format': tf.io.FixedLenFeature([], tf.string), 'image/object/bbox/xmin': tf.io.VarLenFeature(tf.float32), 'image/object/bbox/ymin': tf.io.VarLenFeature(tf.float32), 'image/object/bbox/xmax': tf.io.VarLenFeature(tf.float32), 'image/object/bbox/ymax': tf.io.VarLenFeature(tf.float32), 'image/object/class/text': tf.io.VarLenFeature(tf.string), 'image/object/class/label': tf.io.VarLenFeature(tf.int64), } def _parse_function(example_proto): return tf.io.parse_single_example(example_proto, feature_description) # 应用解析函数 parsed_dataset = dataset.map(_parse_function) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值