2010-02-27 3 views

Odpowiedz

31

Kod w konstruktorze (czyli treści) obiektu towarzyszącego to , a nie dokładnie to samo, co kod w statycznym bloku inicjalizacyjnym klasy Java. W poniższym przykładzie tworzę instancję klasy A, ale inicjalizacja nie występuje.

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] 

Aby wywołać budowę obiektu towarzyszącego gdy pierwsza instancja klasy jest tworzony, można uzyskać do niego dostęp z konstruktora klasy.

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] 

W wielu okolicznościach różnica nie ma znaczenia. Ale jeśli uruchamiasz rakiety (lub inne efekty uboczne), możesz się tym przejmować!