24得票1回答
可以。

我正在尝试做类似下面的事情。@Entity @Table(name="Sample") public record Sample(Integer id, String name) { @Id @GeneratedValue(strategy = Gener...

24得票3回答
为什么Java记录的规范构造函数不能比记录级别具有更严格的访问权限?

我有一个情况,我希望特定类型的记录实例只能使用同一包中的一个独立类中的工厂方法创建。这是因为在创建记录之前,我需要执行大量验证。 该记录旨在成为其验证字段的数据承载器,但无法在记录的构造函数中进行验证,因为我们需要访问一些复杂的验证器对象来实际执行验证。 由于将验证器对象传递给记录构造函数会导...

22得票1回答
C风格的数组不再适用于记录。

我之前使用这个人为编造的代码record Foo(int bar[]) {} 现在,随着Java 16中记录的正式发布,使用C风格数组符号的代码不再编译。以下是来自jshell的输出:jshell> record Foo(int bar[]) {} | Error: | legacy...

21得票3回答
有没有一种方法可以通过反射识别Java 16记录的规范构造函数?

假设我有这样一条记录(或任何其他记录):record X(int i, int j) { X(int i) { this(i, 0); } X() { this(0, 0); } X(String i, String j)...

21得票3回答
Java 14记录和数组

给定以下代码:public static void main(String[] args) { record Foo(int[] ints){} var ints = new int[]{1, 2}; var foo = new Foo(ints); Syst...

20得票2回答
为什么枚举和记录不能结合使用?

最近我正在创建另一个枚举类型。我利用了Java中的一个事实,即枚举是一种特殊类型的类(而不是像C#中的命名整数常量)。我使用了两个字段、一个全参构造函数和两个字段的getter方法。 这是一个示例:enum NamedIdentity { JOHN(1, "John the...

19得票1回答
在Java记录中强制使用不可变集合?

Java记录用于实现浅不可变数据承载类型。如果构造函数接受可变类型,则应实现显式的防御性复制以强制实现不可变性。例如: Java记录用于表示浅不可变数据的载体类型。如果构造函数接受可变类型,则需要进行明确的防御性复制,以确保不可变性。例如:record Data(Set<String&...

19得票4回答
Java记录(records)中的可空组件

我非常喜欢 Java 14 中记录的添加,至少作为预览功能,因为它可以帮助减少我使用 lombok 来创建简单、不可变的“数据持有者”的需求。但是我对可空组件的实现有问题。我试图避免在我的代码库中返回 null 来表示一个值可能不存在。因此,我目前经常使用类似于下面的 lombok 模式。@V...

18得票4回答
使用新的Record类时无法反序列化

我正在尝试用Java 14的新Record类替换现有的Pojos,但是无法这样做。出现以下错误: com.fasterxml.jackson.databind.exc.InvalidDefinitionException:无法构建com.a.a.Post的实例(没有创建者,例如默认构造函数...

17得票3回答
如何在Java Record中使用hasProperty进行断言?

我在一个测试中有一段代码,使用 Hamcrest 2.2 检查结果列表是否包含特定属性:assertThat(result.getUsers(), hasItem( hasProperty("name", equalTo(user1.getName())) )); ...