Co to jest Scala odpowiednik statycznego bloku Javy?Co to jest odpowiednik Scala bloku statycznego Java?
24
A
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ć!