2010-02-27 80 views

回答

31

伴隨對象的構造函數(即body)中的代碼是而不是,它與Java類的靜態初始化塊中的代碼完全相同。在下面的例子中,我創建了A的一個實例,但不會發生初始化。

scala> object Test { class A; object A { println("A.init") }}   
defined module Test 

scala> new Test.A 
res3: Test.A = [email protected] 

scala> Test.A 
A.init 
res4: Test.A.type = [email protected] 

要在創建類的第一個實例時觸發構建伴隨對象,可以從類構造函數中訪問它。

scala> object Test { class A { A }; object A { println("A.init") }} 
defined module Test 

scala> new Test.A             
A.init 
res5: Test.A = [email protected] 

scala> new Test.A 
res6: Test.A = [email protected]7d4e 

在許多情況下,差異無關緊要。但是如果你發射導彈(或其他副作用),你可能會關心!

相關問題