当前位置: 首页 > 知识库问答 >
问题:

为记录定义默认构造函数

红智鑫
2023-03-14

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

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
}

我们如何将默认构造函数添加到记录中?

共有2个答案

商泽宇
2023-03-14

在本例中,如果愿意,可以显式指定一个无参数构造函数,并将其委托给具有默认值的规范构造函数,这可以按如下方式完成-

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

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

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

public Record {}

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

隗俊誉
2023-03-14

为了分割头发,您永远不能定义默认构造函数,因为默认构造函数是由编译器在没有定义构造函数时生成的,因此任何定义的构造函数根据定义都不是默认的。

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

public record Record(int recordId) {
   public Record() {
      this(0); 
   }
}
 类似资料:
  • 问题内容: 我有一条记录,想要向其中添加默认构造函数。 但是它创建了带参数的构造函数。 我们如何向记录添加默认构造函数? 问题答案: 为了分裂头发,您永远无法定义默认构造函数,因为在没有定义构造函数的情况下,编译器会生成默认构造函数,因此根据定义,任何定义的构造函数都不是默认构造函数。 如果希望记录具有无参数构造函数,则记录确实允许添加额外的构造函数或工厂方法,只要调用将所有记录字段作为参数的“规

  • 问题内容: 我有一些简单的Java代码,其结构与此类似: 我将有很多的子类,每个子类以自己的方式(模板方法模式)实现方法。 这很好用,但是我不喜欢子类中有多余的构造函数。输入更多,难以维护。如果要更改构造函数的方法签名,则必须更改所有子类。 当我从子类中删除构造函数时,出现此编译时错误: 我想做的事可能吗? 问题答案: 你会收到此错误,因为没有构造函数的类具有默认构造函数,该构造函数没有参数,并且

  • 似乎一个向量会检查move构造函数是否标记为noexcept,然后再决定重新分配时是移动还是复制元素。默认的移动构造函数是否定义为noexcept?我看到了以下文档,但它没有指定这一点。http://en.cppreference.com/w/cpp/language/move_constructor 隐式声明移动构造函数 如果没有为类类型(struct,类或联合),并且以下所有都是真的:没有用户

  • 问题内容: 默认构造函数到底是什么?你能告诉我以下哪个是默认构造函数,它与其他构造函数有何不同? 问题答案: 他们都不是。如果定义,则不是默认值。 除非你定义另一个构造函数,否则默认构造函数是自动生成的无参数构造函数。任何未初始化的字段都将设置为其默认值。对于你的榜样,它看起来像这样假设的类型String,int以及int,那类本身是公共的: 这与 完全没有构造函数。但是,如果定义至少一个构造函数

  • 我想做一个简单的POJO(POKO?)在Kotlin中使用一个默认的空构造函数和一个带有参数的辅助构造函数创建一个类,该类提供属性 这并没有给我和属性: 这为我提供了属性,但它们在实例化后没有设置: 这给了我一个编译错误,说“不允许在二级构造函数参数上使用'var'”: 那么,这是怎么做到的?我如何拥有一个默认构造函数和一个带有参数和属性的二级构造函数?

  • 问题内容: 我知道我在这里问一些严重的101问题… 我有一些课,还有一个延伸课。在我有一个构造函数,它接受一组参数,并对其字段进行设置。派生类(例如)通常不需要进行修改。现在我的IDE给我 “ Foo中没有默认的构造函数” 。从一点点谷歌搜索,这似乎是因为“构造函数没有继承”。因此,一切都很好,但是我现在如何使它工作而不在每个派生类中复制此构造函数?我假设有一个更合理的方法? 问题答案: 使用构造