2013-04-22 70 views
1

似乎沒有理由和/或可能在scala中定義默認構造函數。scala中構造函數的用法

基本上,構造函數的概念不存在,因爲所有與構造函數有關的東西都是寫在類體中的嗎?

class SeriousClass { 
    exmpl: Text = new Text 

    runMethod() 
} 

我能想到的唯一理由是,除了參數化的一個或一個參數化一個除了默認的構造函數定義default constructor

class SeriousClass2(param: Param) { 
    def this() { 
     this(new Param()) 
    } 
} 
+0

+1'SeriousClass' – 2013-04-23 17:11:31

回答

4

默認的構造確實存在,是的,它是類的整個身體。而不是寫

class SeriousClass2(param: Param) { 
    def this() { 
     this(new Param()) 
    } 
} 

的你會是更好的只是默認構造函數提供默認值:

class SeriousClass2(param: Param = new Param()) { 

} 

它既是地道的,更具可讀性。

此外,有時您可能想禁止從外部類實例化。這可能與指定構造範圍歸檔:

class PrettyPrivateClass private() { 

} 
+0

所以,基本上沒有理由永遠'高清這個()',對吧? – Appleshell 2013-04-22 18:24:14

+0

@AdamS我認爲是這樣的 – 2013-04-22 18:24:49

+3

鑑於主構造函數_must_被調用的事實,輔助/輔助構造函數只能用主構造函數(或其他輔助構造函數)來編寫。因此,所有構造函數都有一個單獨的代碼路徑,並且沒有太多的自由來創建任意不同的構造函數。另外,第二個構造函數必須做的第一件事是調用另一個構造函數。總而言之,它比Java更受限制。 – 2013-04-23 03:42:48

相關問題