为什么auxilary构造函数被强制调用Scala中的主构造函数?

时间:2016-10-04 14:11:33

标签: scala

...并提供所有必要的参数,即使它们不是辅助构造函数所必需的。 (来源:http://joelabrahamsson.com/learning-scala-part-four-classes-and-constructors/)这不是Java中的情况。这背后的原因是什么?

2 个答案:

答案 0 :(得分:0)

简单:如果不需要参数,请不要将其添加到主构造函数中。

在java中,所有构造函数也执行类主体中的代码:

public class Foo {
   String x = mkX();
   public Foo() { System.out.println("THIS"); }
   public static String mkX() { System.out.println("THAT"); return "";}
}

new Foo(); // prints THAT, then THIS

scala中的需求实际上更加宽松:允许主构造函数具有参数。

答案 1 :(得分:0)

在Scala中,主要构造函数的参数在类中的任何位置都可用(除其他原因外,您不必重复Java this.x = x; this.y = y; this.z = z;)。如果未使用该参数,则没有理由首先成为参数,因此请仅考虑使用 的情况。因此,如果您可以避免提供这些参数,然后到达使用它们的地方,会发生什么?

编译器可以使用默认值(null / 0 / false / etc),这很可能不是用户想要的。或抛出异常,将编译错误转换为运行时错误,这与我们想要的相反。