Scala不会为默认值创建任何重载的构造函数

时间:2013-12-09 10:24:23

标签: java scala default-value

我正在使用Scala并考虑Scala构造函数中的默认值问题。

例如,具有默认值的Scala类:

class SomeAClass(someParam: SomeBBaseClass = new SomeImpOfBBaseClass()) { ... }


我的问题是与Java的兼容性。我考虑过会创建一个重载的构造函数,如SomeAClass()和SomeAClass(SomeBBaseClass someParam),但只有最后一个,所以默认值实际上没有意义。

我可以自己创建辅助构造函数以保持与Java的兼容性,但我希望有另一种解决方案。

2 个答案:

答案 0 :(得分:0)

除了自定义构造函数之外,我不知道任何解决方案。如果需要,您必须手动创建重载的构造函数。你可以尝试用宏做一些事情,但我不确定它是否可能。

事实上,这是有原因的。如果您有多个默认参数怎么办?那么应该生成哪些重载?

答案 1 :(得分:0)

在Scala中,构造函数重载是通过使用辅助构造函数完成的。

辅助构造函数

在Java中,可以重载构造函数以提供接受不同参数的不同构造函数。在类似的行上,Scala类可以声明辅助构造函数,它们是Primary Constructor的重载形式。辅助构造函数以此命名。让我们看一个例子:

class Employee(val firstName:String, val lastName:String){
var age:Int = 0

  //Auxiliary Constructor
 def this(firstName:String, lastName: String, age:Int){
this(firstName,lastName)
 this.age = age

  }
override def toString():String = {
"First Name: "+firstName+" Last Name: "+lastName
}
}