Javaの静的ブロックに相当するScalaとは何ですか?
7553 次
1 に答える
38
コンパニオンオブジェクトのコンストラクター(つまり、本体)のコードは、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
多くの場合、違いは重要ではありません。しかし、ミサイル(または他の副作用)を発射する場合は、気にするかもしれません!
于 2010-02-27T12:05:25.027 に答える