定义记录的默认构造函数


20

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

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
}

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


您定义的是一个紧凑的构造函数,该构造函数从记录头中获取其声明。在紧凑的构造函数中,记录组件与相应的形式参数之间在名称,类型和变量Arity之间存在1-1匹配,对于规范构造函数也是如此。一条记录只能有一个规范的构造函数。如果声明紧凑型构造函数为规范构造函数
Vicente Romero

Answers:


18

为了分裂头发,您永远无法定义默认构造函数,因为在没有定义构造函数的情况下,编译器会生成默认构造函数,因此从定义上讲,任何定义的构造函数都不是默认构造函数。

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

public record Record(int recordId) {
   public Record() {
      this(0); 
   }
}

17

显式构造函数

在您的情况下,如果需要,您可以显式指定一个无参数的构造函数,并使用默认值委派给规范的构造函数,这可以通过-

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

简而言之,任何非规范的构造函数都应委派给一个,对于这些表示形式的数据承载性质而言,这应该成立。

紧凑的构造函数

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

public Record {}

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.