Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

Код в конструкторе (т.е. тело) объекта-компаньона не точно такой же, как код в статическом блоке инициализации класса 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]

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