Scala で Java の静的ブロックに相当するものは何ですか? 質問する

Scala で Java の静的ブロックに相当するものは何ですか? 質問する

Scala における Java の static ブロックに相当するものは何ですか?

ベストアンサー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

多くの場合、その違いは問題になりません。しかし、ミサイルを発射する場合(またはその他の副作用)は、気になるかもしれません。

おすすめ記事