为什么不使用自定义构造函数推断变量arity记录组件



尝试使用record和记录组件编写一些代码。我正在使用可变稀有组件,在自定义构造函数上遇到了编译时错误。

public record Break<R extends Record>(R record, String... notifications) {
public Break(R record, String... notifications) {
System.out.println("record: " + record + " and notifications: " + Arrays.toString(notifications));
this.record = record;
this.notifications = notifications;
}
// compile error: non canonical record constructor must delegate to another costructor
public Break(R record) { 
System.out.println("record: " + record);
this.record = record;
}
public Break() {
this(null); // this works 
// actually intelliJ suggests it uses the constructor that is not compiling
}

public static void main(String[] args) {
new Break<>(new Break<>());
}
}

我很想了解的是,当通过另一个自定义构造函数调用时,在没有提供任何初始化组件的情况下,类似的构造函数是如何推断出来的。

这与变量arity无关。所有记录构造函数链都必须";从下往上";在规范构造函数(可以使用紧凑形式指定(中,变量arity与否。这体现为每个非规范构造函数必须委托给另一个构造函数的要求;最终,这意味着链在规范中垫底。

你可以用修复你的坏构造函数

public Break(R record) {
this(record);
}

但是,您甚至不需要全部声明这个构造函数,因为规范构造函数已经可以处理形式为new Break(r)的调用了。

相关内容

  • 没有找到相关文章