2013-12-09 37 views
0

我正在Scala中工作,並考慮Scala構造函數中的默認值問題。Scala不會爲默認值創建任何重載構造函數

例如Scala的類的默認值:

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


我的問題是兼容性爲Java。我開始在那裏創建像SomeAClass()和SomeAClass(SomeBBaseClass someParam)這樣的重載構造函數,但只有最後一個,所以默認值是毫無意義的。

我可以自己創建輔助構造函數來保持與Java兼容,但我希望有另一種解決方案。

回答

0

我不知道自定義構造函數以外的任何解決方案。如果您需要,您必須手動創建重載的構造函數。你可以嘗試用宏來做一些事情,但我不確定它是否可行。

其實這是有原因的。如果你有多個默認參數呢?那麼應該生成哪些重載?

0

在Scala構造函數重載是通過使用輔助構造函數完成的。

輔助構造

在Java一個可以重載構造,以提供不同的構造函數接受不同的參數。在類似的行Scala類可以聲明主構造函數的重載形式的輔助構造函數。輔助構造函數被命名爲this。讓我們看一個例子:

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 
} 
}