问题标签 [java-record]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1564 浏览

java - Java 14 记录和数组

给定以下代码:

显然,使用了数组的toString,equals方法(而不是静态方法Arrays::equals,Arrays::deepEqualsArray::toString)。

所以我猜Java 14 Records(JEP 359)不能很好地处理数组,必须使用IDE生成相应的方法(至少在IntelliJ中,默认情况下会生成“有用”的方法,即它们使用静态方法中Arrays)。

或者有没有其他解决方案?

0 投票
6 回答
11004 浏览

java - Lombok getter/setter vs Java 14 记录

我喜欢Lombok项目,但这些天我正在阅读并尝试 java 14 的一些新功能。

在新功能中,有一个record关键字,允许创建一个已经内置以下功能的类:构造函数、私有最终字段、访问器、equals/hashCode、getter、toString 方法。

现在我的问题是:更好地依赖 Lombok 的功能还是我们应该开始使用记录功能:

最好使用这个:

或者那个:

这两种方法的优缺点是什么?

0 投票
2 回答
1575 浏览

java - 如何记录 Java Record 参数?

应该如何记录Java Record参数?我指的是最终成为构造函数参数的参数,类字段。

我试过了:

但 IntelliJ IDEA@param将 s 标记为错误。我找不到一个关于这应该如何工作的在线示例。我发现的最接近的讨论是https://bugs.openjdk.java.net/browse/JDK-8225055

我在 JDK 中发现了一些单元 测试,似乎暗示这应该可以工作。也许这是一个IDE错误?

我正在使用 OpenJDK 14+36-1461,IDEA 2020.1。

为了以防万一,我提交了一份针对 IDEA 的错误报告。

0 投票
1 回答
52 浏览

java - 在 Java 14 中定义 Records 类(JEP 359:Records(Preview))的括号内空格的 IntelliJ 编辑器代码样式设置?

我正在使用 IntelliJ 2020.1.1 RC,它应该支持在 Java 14 中预览的记录功能。(请参阅JEP 359:记录(预览)

我找不到在类定义的括号内放置空格的设置record

示例代码:

Java 代码样式的 IntelliJ 首选项的屏幕截图。

Java 代码样式的 IntelliJ 首选项的屏幕截图

0 投票
1 回答
2754 浏览

java - 带有 Java 14 的 IntelliJ 2020.1 中的“记录”预览功能在 Maven“安装”期间因编译器错误而失败,但以其他方式运行

我正在尝试将JEP 359: Java 中的记录(预览)功能与IntelliJ 2020.1.1 RC 一起使用。

我定义了一个这样的类:

当我使用这个类在另一个类中运行 main 方法时LocalTimeRange,没问题。

当我做一个 Maven 时install,我得到这个错误:

错误:(6,8)java:记录是预览功能,默认情况下被禁用。

➥ 如何帮助 Maven 完成install操作?

我使用了Maven Quickstart Archetype 1.4 版。然后我编辑了 POM 以使用其各种依赖项的所有最新版本。


我有“项目结构”设置:

项目设置 > 项目 > 项目 SDK > 14

项目设置 > 项目 > 项目语言级别 > 14(预览) - 记录、模式、文本块

项目设置 > 模块 > 项目语言级别 > 14(预览) - 记录、模式、文本块

我有“首选项”设置:

构建、执行、部署 > 编译器 > Java 编译器 > 每模块字节码版本 > 目标字节码版本 > 14

运行这个Java:openjdk 14.0.1 2020-04-14 OpenJDK Runtime Environment AdoptOpenJDK (build 14.0.1+7) OpenJDK 64-Bit Server VM AdoptOpenJDK (build 14.0.1+7,混合模式,共享)

使用:

IntelliJ IDEA 2020.1.1(终极版)

构建 #IU-201.7223.58,建于 2020 年 4 月 26 日

订阅有效期至 2020 年 8 月 28 日

运行时版本:11.0.6+8-b765.40 x86_64

虚拟机:JetBrains sro macOS 10.14.6 的 OpenJDK 64 位服务器虚拟机

GC:ParNew、ConcurrentMarkSweep

内存:2200M

核心:6

非捆绑插件:com.github.leomillon.uuidgenerator

0 投票
4 回答
194 浏览

java - jlink:ed 应用程序中的记录引发异常

在 jlink:ed 应用程序中使用记录(预览功能 java-14),使用选项时会出现以下错误:

0 投票
3 回答
3491 浏览

java - 您是否需要为记录覆盖 hashCode() 和 equals()?

假设以下示例:

我是否需要覆盖hashCodeequals如果我要将所述对象添加到 a 中HashMap

0 投票
2 回答
2015 浏览

java - Java 14 Record 文档中“浅不可变”的含义

我正在阅读Records的文档, 但不理解“浅不可变”一词。浅不可变是什么意思?如果它是不可变的,为什么我们需要一个复制构造函数?为什么是两个“Hello Worlds!”?

对于所有记录类,以下不变量必须保持:如果记录 R 的组件是 c1、c2、...cn,那么如果记录实例被复制如下:

那么它一定是这样的r.equals(copy)

0 投票
4 回答
531 浏览

java - Java 记录 StackOverflow RuntimeException

我正在学习 Java 记录、预览功能,并且在运行以下代码时遇到 StackOverflow 异常。

从异常中,我意识到它与 toString() 有关,当我在记录中覆盖 toString() 时,如下代码所示,我看不到 Exception 。

此代码打印 John : Enrolled for Math,Enrolled for History 。有人可以解释为什么如果我不覆盖 toString() 我会得到 StackOverflow?我在打印时也看到了 StackOverflowjohn.hashCode()

0 投票
1 回答
137 浏览

java - Java 记录数据类型不适用于网络通信

我认为 Java 14 中新的 Java Record 数据类型应该适合跨网络的数据,因为数据不应该在过程中发生变化,这是记录数据类型的主要特征 - 不可变。

我使用 RSocket 中的数据类型。在发送方,我收到编码器错误。我还没有找到编码器是关于什么的。在接收方,我得到一个解串器错误。据我所知,记录无法实现诸如 Serializable 之类的接口。

所以,记录数据类型不适用于网络编程,对吗?

更新:

我将 Serializable 接口添加到发送方和接收方的记录定义中。发出请求后,TCP发送端正常,接收端出错

标记这个问题的人有不同的经历吗?