Frage

Was ist Scala Äquivalent von Java statische Block?

War es hilfreich?

Lösung

-Code im Konstruktor (das heißt, der Körper) des Begleitobjekts ist nicht genau die gleiche wie Code in einem statischen initialiser Block einer Java-Klasse. Im Beispiel unten, erstelle ich eine Instanz von A, aber die Initialisierung nicht auf.

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

Um Trigger Aufbau des Begleitobjekts, wenn die erste Instanz der Klasse erstellt wird, können Sie es aus der Klasse Konstruktor zugreifen.

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

In vielen Fällen wäre der Unterschied keine Rolle. Aber wenn Sie starten Raketen (oder andere Nebenwirkungen), könnten Sie interessieren!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top