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

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

28
задан missingfaktor 27 February 2010 в 11:16
поделиться

1 ответ

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

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

35
ответ дан 28 November 2019 в 03:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: