定义记录的默认构造函数
Define default constructor for record
我有一条记录,想给它添加默认构造函数。
public record Record(int recordId) {
public Record {
}
}
但是它使用 int
参数创建了构造函数。
public final class Record extends java.lang.Record {
private final int recordId;
public Record(int);
//other method
}
我们如何向记录添加默认构造函数?
要分头发,你永远不能定义默认构造函数,因为默认构造函数是在没有定义构造函数的情况下由编译器生成的,因此任何定义的构造函数根据定义都不是默认构造函数。
如果你想让一个记录有一个无参数的构造函数,records do allow adding extra constructors or factory methods,只要调用将所有记录字段作为参数的"canonical constructor"。
public record Record(int recordId) {
public Record() {
this(0);
}
}
显式构造函数
在你的情况下,如果你愿意,你可以显式指定一个无参数构造函数,并委托给具有默认值的规范构造函数,这可以通过 -
public Record(){
this(Integer.MIN_VALUE);
}
简而言之,任何非规范的构造函数都应该委托给一个构造函数,并且对于这些表示的数据承载性质来说应该是正确的。
紧凑型构造函数
另一方面,请注意您在代码中使用的表示。
public Record {}
被称为“紧凑型构造函数”,它表示接受所有参数的构造函数,也可用于验证作为记录属性提供的数据。紧凑构造函数是声明规范构造函数的另一种方式。
我有一条记录,想给它添加默认构造函数。
public record Record(int recordId) {
public Record {
}
}
但是它使用 int
参数创建了构造函数。
public final class Record extends java.lang.Record {
private final int recordId;
public Record(int);
//other method
}
我们如何向记录添加默认构造函数?
要分头发,你永远不能定义默认构造函数,因为默认构造函数是在没有定义构造函数的情况下由编译器生成的,因此任何定义的构造函数根据定义都不是默认构造函数。
如果你想让一个记录有一个无参数的构造函数,records do allow adding extra constructors or factory methods,只要调用将所有记录字段作为参数的"canonical constructor"。
public record Record(int recordId) {
public Record() {
this(0);
}
}
显式构造函数
在你的情况下,如果你愿意,你可以显式指定一个无参数构造函数,并委托给具有默认值的规范构造函数,这可以通过 -
public Record(){
this(Integer.MIN_VALUE);
}
简而言之,任何非规范的构造函数都应该委托给一个构造函数,并且对于这些表示的数据承载性质来说应该是正确的。
紧凑型构造函数
另一方面,请注意您在代码中使用的表示。
public Record {}
被称为“紧凑型构造函数”,它表示接受所有参数的构造函数,也可用于验证作为记录属性提供的数据。紧凑构造函数是声明规范构造函数的另一种方式。