28

我有一条记录,想为其添加默认构造函数。

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
}

我们如何向记录添加默认构造函数?

4

2 回答 2

30

简单来说,您永远不能定义默认构造函数,因为当没有定义构造函数时,编译器会生成默认构造函数,因此任何定义的构造函数都不是默认构造函数。

如果您希望记录具有无参数构造函数,则记录确实允许添加额外的构造函数或工厂方法,只要调用将所有记录字段作为参数的“规范构造函数”。

public record Record(int recordId) {
   public Record() {
      this(0); 
   }
}
于 2020-04-11T06:03:45.050 回答
23

显式构造函数

在您的情况下,如果您愿意,您可以显式指定一个无参数构造函数,并将其委托给具有默认值的规范构造函数,这可以通过 -

public Record(){
    this(Integer.MIN_VALUE);
}

简而言之,任何非规范的构造函数都应该委托给一个,并且对于这些表示的数据承载性质来说应该是正确的。

紧凑的构造函数

另一方面,请注意您在代码中使用的表示形式。

public Record {}

被称为“紧凑构造函数”,它表示接受所有参数的构造函数,也可用于验证作为记录属性提供的数据。紧凑构造函数是声明规范构造函数的另一种方式。

于 2020-04-11T06:07:23.983 回答