...并提供所有必要的参数,即使它们不是辅助构造函数所必需的。 (来源:http://joelabrahamsson.com/learning-scala-part-four-classes-and-constructors/)这不是Java中的情况。这背后的原因是什么?
答案 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),这很可能不是用户想要的。或抛出异常,将编译错误转换为运行时错误,这与我们想要的相反。