Что Scala эквивалентно статическому блоку Java? - PullRequest
28 голосов
/ 27 февраля 2010

Что такое Scala эквивалент статического блока Java?

1 Ответ

35 голосов
/ 27 февраля 2010

Код в конструкторе (то есть в теле) объекта-компаньона не точно такой же, как код в статическом блоке инициализатора класса Java. В приведенном ниже примере я создаю экземпляр A, но инициализация не происходит.

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

scala> new Test.A
res3: Test.A = Test$A@3b48a8e6

scala> Test.A
A.init
res4: Test.A.type = Test$A$@6e453dd5

Чтобы вызвать конструирование объекта-компаньона при создании первого экземпляра класса, вы можете получить к нему доступ из конструктора класса.

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

scala> new Test.A                                                  
A.init
res5: Test.A = Test$A@4e94a28e

scala> new Test.A
res6: Test.A = Test$A@30227d4e

Во многих случаях разница не имеет значения. Но если вы запускаете ракеты (или другие побочные эффекты), вам может быть все равно!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...