我正在使用Scala并考虑Scala构造函数中的默认值问题。
例如,具有默认值的Scala类:
class SomeAClass(someParam: SomeBBaseClass = new SomeImpOfBBaseClass()) { ... }
我的问题是与Java的兼容性。我考虑过会创建一个重载的构造函数,如SomeAClass()和SomeAClass(SomeBBaseClass someParam),但只有最后一个,所以默认值实际上没有意义。
我可以自己创建辅助构造函数以保持与Java的兼容性,但我希望有另一种解决方案。
答案 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
}
}