gpt4 book ai didi

java - 使用新的 Java 14 Record 功能,是否可以为同一个 Record 创建多个构造函数?

转载 作者:行者123 更新时间:2023-12-04 13:12:34 27 4
gpt4 key购买 nike

我有一堆使用 Lombok 的“数据”类,我想迁移所有这些类以使用 Java 14 中提供的新 Record 功能。使用新的 Java 14 Record 功能,是否可以为同一个 Record 创建多个构造函数?如果没有,是否有替代方案?

最佳答案

使用 Java 14,记录不能有多个构造函数(引用:Java 14 - JEP 359: Records (Preview))。
从 Java 15 和 16+ 开始,记录可能有多个构造函数 .
(参见 Java 15 - JEP 384: Records (Second Preview)Java 16 - JEP 395: Records (Final) )。
但是,每个构造函数 必须委托(delegate)给记录的规范构造函数 可以明确定义或自动生成。
一个例子:

public record Person(
String firstName,
String lastName
) {
// Compact canonical constructor:
public Person {
// Validations only; fields are assigned automatically.
Objects.requireNonNull(firstName);
Objects.requireNonNull(lastName);

// An explicit fields assignment, like
// this.firstName = firstName;
// would be a syntax error in compact-form canonical constructor
}

public Person(String lastName) {
// Additional constructors MUST delegate to the canonical constructor,
// either directly:
this("John", lastName);
}

public Person() {
// ... or indirectly:
this("Doe");
}
}
另一个例子:
public record Person(
String firstName,
String lastName
) {
// Canonical constructor isn't defined in code,
// so it is generated implicitly by the compiler.

public Person(String lastName) {
// Additional constructors still MUST delegate to the canonical constructor!
// This works:
this("John", lastName);

// (Re-)Assigning fields here directly would be a compiler error:
// this.lastName = lastName; // ERROR: Variable 'lastName' might already have been assigned to
}

public Person() {
// Delegates to Person(String), which in turn delegates to the canonical constructor:
this("Doe");
}
}

关于java - 使用新的 Java 14 Record 功能,是否可以为同一个 Record 创建多个构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63605831/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com